簡體   English   中英

Shell腳本雙引號

[英]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")

我認為您的logfilerx_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.

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