Bash shell脚本:嵌套子shell++;

Bash shell脚本:嵌套子shell++;,bash,shell,nested,ksh,Bash,Shell,Nested,Ksh,这不仅仅是一个问题,而是对“另一种方法”的要求 实际上,如果我想在另一个命令中使用上一个命令的结果,我会使用: R1=$("cat somefile | awk '{ print $1 }'" ) myScript -c $R1 -h123 那么,“更好的方法”是: 但是如果我不得不多次使用结果呢?假设:使用多次$R1,两个选项是: 选择1 R1=$(“cat somefile | awk'{print$1}'”) 选择2 myScript -c $("cat somefile | awk

这不仅仅是一个问题,而是对“另一种方法”的要求

实际上,如果我想在另一个命令中使用上一个命令的结果,我会使用:

R1=$("cat somefile |  awk '{ print $1 }'" )
myScript -c $R1 -h123
那么,“更好的方法”是:

但是如果我不得不多次使用结果呢?假设:使用多次
$R1
,两个选项是:

选择1

R1=$(“cat somefile | awk'{print$1}'”)

选择2

myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123 -x $("cat somefile |  awk '{ print $1 }'" )

您知道另一种“存储”上一个命令/脚本的结果并将其用作另一个命令/脚本的参数的方法吗?

当然,还有其他方法。它们不是更好的方法

首先,您可以将答案存储在一个文件中,然后多次对该文件的内容进行cat

其次,可以将结果传递给bash函数,如:

callMyScript() {
   myScript -c "$1" -h123 -x "$1" 
}
因此:

callMyScript "$(awk '{ print $1; }' somefile)"
这与保存到局部变量几乎完全相同

那么你对使用awk感兴趣?您可以让awk为您生成该行,并让bash运行它:

eval $(awk '{ printf "myScript -c %s -h123 -x %s\n", $1, $1; }' somefile)
但现在我们只是变得愚蠢了,甚至在概念上,这与简单地保存到变量中没有什么不同


我的建议是:使用变量。

另一种不完美的方法:

源脚本#1,然后当脚本#2运行时#1中声明的所有变量都可用于#2

您最好的选择是一个包装器脚本,它为您保存所有变量,其他人已经注意到了这一点


在bash中,source内置命令与'dot'相同

您的第一个建议到底有什么问题?您必须更正引号:
R1=$(awk'{print$1}'somefile)myScript-c“$R1”-h123
,但除此之外,它还可以。选项2不好,因为您执行了两次外部命令(hurting performance)第二次你会收到同样的输出,这并不是说除了将结果存储在变量中之外,你还要求一种存储结果的方法?@idimba:是的,这就是为什么我将结果存储在变量中@Philipp,@Jefromi:我问它是否存在另一种方式?,不确定awk或sed……首先,这是对猫的无用使用。Awk接受文件名作为参数,正如Philipp所示,但并未真正指出。
callMyScript "$(awk '{ print $1; }' somefile)"
eval $(awk '{ printf "myScript -c %s -h123 -x %s\n", $1, $1; }' somefile)
#!/bin/ksh
.  myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123 
myScript2