[英]Shell script double quotes
我正在編寫一個用於解析日志文件的Shell腳本。 重要的部分是:
rx=$(echo "$logfile" | grep -o "rx_value.*" | grep -o "[0-9]\{1,10\}")
echo rx=$rx
將以下內容打印到STDOUT(WRONG):
rx=
如果我這樣從$ logfile中刪除雙qoutes:
rx=$(echo $logfile | grep -o "rx_value.*" | grep -o "[0-9]\{1,10\}")
echo rx=$rx
將以下內容打印到STDOUT(CORRECT):
rx=0
我非常確定在變量周圍使用雙引號是一件好事,因此我在腳本中的所有變量上都使用了它們。 到目前為止,我發現的信息表明,如果不對變量加上雙引號,則由於單詞拆分,亂序等原因,結果可能會出錯。
誰能解釋這里發生了什么?
編輯:
$ logfile包含使用wget下載的日志文件:
$logfile=(wget -q -O -"http://www.example.com")
我認為您的logfile
在rx_value
和您要查找的數字之間有一個換行符。 帶有不帶引號的參數擴展名的echo
命令會將換行符轉換為空格。 請參閱文檔中的單詞拆分或字段拆分。
您沒有提到$logfile
的值。 您的信息是正確的-無引號和雙引號之間的區別恰恰是字段拆分和通配符。 所以,如果你依靠他們中的一個發生,你會得到用雙引號錯誤的結果。
更新 。 好的,因此您的變量包含一個用wget
檢索的日志文件。 我可以建議改用管道嗎?
rx=$(wget -q -O -"http://www.example.com" |
grep -o "rx_value.*" |
grep -o "[0-9]\{1,10\}")
但這可能會輸出與雙引號示例相同的結果,並且我相信這一點超出了您認為正確的答案。
如果在輸出中引用變量會怎樣?
echo "rx=$rx"
不這樣做通常是“神秘”行為的根源。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.