2010-05-13 70 views
0

不仅是一个问题,这是一个“另一种方式来做到这一点”的请求。shell脚本:嵌套的子shell ++

其实,如果我想在另一个使用一个命令的结果,我用:

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

这时,一个“更好的方式”是:

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

但如果我必须多次使用结果?比方说:在使用几次$R1,以及2个选项分别是:

选项1

R1 = $( “猫somefile | awk的 '{打印$ 1}'”)

myScript -c $R1 -h123 -x$R1 

选项2

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

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

+0

究竟什么是你的第一个建议的问题?您必须更正报价: 'R1 = $(awk'{print $ 1}'somefile) myScript -c“$ R1”-h123' 但除此之外它没有问题。 – Philipp 2010-05-13 19:17:35

+0

选项2不好,因为你执行两次外部命令(性能提升),并且第二次你不会收到相同的输出 – dimba 2010-05-13 19:21:14

+0

你想要一种方法来存储结果,除了将结果存储在变量中吗? – Cascabel 2010-05-13 19:24:38

回答

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) 

,但现在我们才刚刚傻了,甚至没有从简单的节省关到一个变量不同的概念。

我的建议:使用变量。

0

另一种不完美的方式:

源脚本#1,那么当脚本#2运行在所有#1声明的变量可用于#2。

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

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

在bash的内置命令是一样的“点”