2013-04-01 27 views
1

我想使用命令替換來設置位置參數。這一個簡單的情況下正常工作使用命令替換設置位置參數

$ set $(echo hello; echo world) 

$ echo $1 
hello 

但是,如果一個「行」包含一個空間,然後它會失敗

$ set $(echo hello hello; echo world world) 

$ echo $1 
hello 

我也試着改變IFS

$ IFS=$'\n' set $(echo hello hello; echo world world) 

$ echo $1 
hello 
+0

你可以使用一個子shell? '(IFS = $'\ n';設置....)' – suspectus

+0

@suspectus:您的工作是因爲IFS = $'\ n''之後的分號 - 這使得它爲整個shell設置IFS,而不是隻用於'set'命令。 –

+0

真棒問題!正在尋找如何實現非常相似的東西,沒有IFS。 –

回答

3

IFS=$'\n' set $(echo hello hello; echo world world)幾乎是正確但不完全:它運行set命令,並將IFS設置爲換行符,但發生在輸出$(...)h後因爲已經使用IFS的標準值進行了分析。您需要設置IFS作爲一個單獨的命令,然後使用set命令,然後設置IFS回:

$ saveIFS=$IFS 
$ IFS=$'\n' 
$ set $(echo hello hello; echo world world) 
$ IFS=$saveIFS 
$ echo "$1" 
hello hello 
echo "$2" 
world world