2010-05-13 65 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的內置命令是一樣的「點」