[英]Manipulate variables containing quoted strings in a BASH script
我必須將像data='Type=Eatable Fruits="Apple Orange"'
這樣的變量傳遞給bash腳本(print.sh),它只是逐行打印第一個,第二個,第三個命令行參數。
當我將變量data
傳遞給腳本時,通過運行: sh print.sh $data
,輸出為
Type=Eatable
Fruits="Apple
Orange"
但后來需要的是
Type=Eatable
Fruits="Apple Orange"
第二行還應該打印雙引號。 (第三個參數應為NULL / Nothing)
我應該如何改變以獲得如上所述的輸出?
當你運行sh print.sh $data
,它會像這樣被標記化:
[ sh
, print.sh
, $data
]
由於未引用$data
,因此變量data
的值被標記化為
[ Fruits="Apple
, Orange"
]
然后將其添加到原始命令中
[ sh
, print.sh
, Fruits="Apple
, Orange"
]
並且$ 1 = Fruits="Apple
,$ 2 = Orange"
調用print.sh
聽起來你真的希望這是print.sh
一個參數,而不是兩個。 根據Pierre-Louis Laffont的回答,使用"$data"
而不是$data
將會發生這種情況
用雙引號之間的變量打電話:
$ ./script.sh $data
Fruits="Apple
Orange"
$ ./script.sh "$data"
Fruits="Apple Orange"
我的兩分錢,腳本需要修改。 你正在用嗎
echo $1
echo $2
你應該試試
echo $1 $2
當你傳遞字符串時,我懷疑所有內容都被視為arg1而arg2是空的。 通過打印$#確認。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.