shell腳本中單雙引號疑惑
阿新 • • 發佈:2018-08-14
轉義 mil 技術分享 應該 任務 awk命令 fff 不起作用 .com
工作中常用到shell腳本,遇到了一個疑惑,求解。
常見的解釋:
單引號字符串的限制:
- 單引號裏的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字符串拼接使用。
雙引號的優點:
- 雙引號裏可以有變量
- 雙引號裏可以出現轉義字符
我的問題如圖一:在vim編輯器中,第21行,在使用單引號的情況下,‘$i‘ 是打印出了數值,不是上面解釋的單引號裏面的變量是無效的,打印出$i。
圖一
與之類似的腳本,用雙引號表示: 第18行
6~9四行是str.txt內容(為了觀看方便,copy到一起顯示)
圖二、輸出腳本
雙引號、單引號、沒有引號結果如下圖:紅圈圈起來的部分。結果是:
雙引號括起來的變量,原樣輸出了圖二中的第九行,* 在雙引號中不起作用了
單引號確實是任何字符都會原樣輸出,輸出了$word
沒有引號,圖二中第九行中首字母 * 起作用,輸出了這個目錄下的內容。
疑惑1:在圖一中,單引號中的變量應該無效的但是結果確打印出了值,在圖二中就是無效的了,這裏是否是因為圖一中的單引號用在了awk命令行中。
疑惑2:在圖二中,雙引號輸出和沒有引號輸出結果,雙引號在執行 "$word" 後,打印出 * 17 Procedure Status * ,echo執行時,不是先碰到 * 符號,首先執行嗎?為什麽這裏沒有執行呢?不是說雙引號中的 可以有變量的嗎 ? 這裏有一個問題就是 * 符號,在這裏解釋為是否屬於變量將。
任務完成了,但是這個疑惑,就像跟刺一樣紮在心裏不舒服,求解。
shell腳本中單雙引號疑惑