1. 程式人生 > >shell腳本中單雙引號疑惑

shell腳本中單雙引號疑惑

轉義 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腳本中單雙引號疑惑