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