簡體   English   中英

在BASH腳本中處理包含帶引號的字符串的變量

[英]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 ,它會像這樣被標記化:

[ shprint.sh$data ]

由於未引用$data ,因此變量data的值被標記化為

[ Fruits="AppleOrange" ]

然后將其添加到原始命令中

[ shprint.shFruits="AppleOrange" ]

並且$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM