shell脚本:嵌套的子shell ++

时间:2010-05-13 19:12:54

标签: bash shell nested ksh

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

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

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

然后,“更好的方式”是:

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

但是如果我必须多次使用结果怎么办?让我们说:使用$R1几次,这两个选项是:

选项1

  

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

myScript -c $R1 -h123 -x$R1

选项2

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

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

2 个答案:

答案 0 :(得分:0)

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

首先,您可以将答案存储在一个文件中,然后多次捕获该文件的内容。

其次,您可以将结果传递给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 :(得分:0)

另一种不完美的方式:

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

#!/bin/ksh
.  myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123 
myScript2 

您最好的选择是一个包装脚本,可以为您保留所有变量,就像其他人已经注意到的一样。

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