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