2012-12-14 47 views
1

我不得不像data='Type=Eatable Fruits="Apple Orange"'一個變量傳遞給一個bash腳本(print.sh),簡單地打印第一,第二,第三比命令行參數,一個由線。操縱含有引用的字符串變量bash腳本

當我傳遞的變量data到腳本,通過運行:sh print.sh $data,產量爲

Type=Eatable 
Fruits="Apple 
Orange" 

但隨後的需求是

Type=Eatable 
Fruits="Apple Orange" 
  

第二行也應該打印雙引號。 (第三個參數應該是NULL/Nothing)

我該如何改變以獲得像上面那樣的輸出?

回答

1

讓你您的通話雙引號之間的變量:

$ ./script.sh $data 
Fruits="Apple 
Orange" 

$ ./script.sh "$data" 
Fruits="Apple Orange" 
0

我的兩分錢,腳本需要修改。您是否使用

echo $1 
echo $2 

你應該嘗試

echo $1 $2 

當你通過我猜想,一切都被視爲ARG1和ARG2是空的字符串。通過打印$#進行確認。

2

當你運行sh print.sh $data,它就會被標記化這樣的:

[shprint.sh$data]

因爲$data沒有加引號,變量data的價值被標記化到

[ Fruits="AppleOrange"]

,然後將其加入原來的命令使

[shprint.shFruits="AppleOrange"]

而且print.sh被調用以$ 1 = Fruits="Apple,$ 2 = Orange"

這聽起來像你其實想這​​是一個參數到print.sh,不是兩個。根據Pierre-Louis Laffont的回答,使用"$data"而不是$data將會發生這種情況