單引號 ''、雙引號 "" 和 shell變量
字符串是 shell 編程中 最常見的 變量,沒有空格的字符串變量可以用 單引號,也可以用 雙引號,也可以不用 引號。 但是當變量 是存在空格的字符串時就需要使用 單引號 和 雙引號 ,否則操作系統會將空格后面的字符串識別成命令。
[root@localhost home]# var=hello world ! #Shell程序執行完 var=hello 后,把 world 解釋為命令。
bash: world: command not found...
[root@localhost home]#
[root@localhost home]# var="hello world !"
[root@localhost home]# echo ${var}
hello world !
[root@localhost home]#
單引號 '' 和雙引號 "" 區別
單引號對字符串的限制:
- 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。
解釋:單引號' '會讓shell忽略所有特殊字符,包括 $、\、
[root@localhost home]# echo ${var} #輸出var變量
hello world !
[root@localhost home]# newvar='The date is `date` ${var}' #定義變量newvar,使用單引號。
[root@localhost home]# echo ${newvar}
The date is `date` ${var} #在單引號中特殊字符` `,${ }被忽略了。
[root@localhost home]#
雙引號對字符串的限制:
- 雙引號里可以有變量
- 雙引號里可以出現轉義字符
解釋:單引號' '會讓shell忽略所有特殊字符,包括 $、\、
[root@localhost home]# echo ${var}
hello world !
[root@localhost home]# newvar='The date is `date` ${var}'
[root@localhost home]# echo ${newvar}
The date is `date` ${var}
[root@localhost home]# unset newvar #刪除變量
[root@localhost home]# newvar="The date is `date` ${var}" #定義變量newvar,使用雙引號。
[root@localhost home]# echo ${newvar}
The date is Mon May 24 19:59:49 PDT 2021 hello world ! #在雙引號中特殊字符` `,${ }沒有被忽略。
[root@localhost home]#
反引號 ` ` 和單引號 '' 和雙引號 "" 區別
單引號 和 雙引號 是用來定義變量。而 反引號 則是用來命令替換的。
$() 和 反引號 都是命令替換 功能符號,反引號 (`) 位於鍵盤的 Tab 鍵 的上方,1 鍵的左方。注意與單引號(')位於Enter鍵的左方的區別。
命令替換是指shell能夠將一個命令的 標准輸出 插在一個命令行中任何位置。
[root@localhost home]# echo the date is `date` #shell會執行反引號中的 date 命令,把結果插入到 echo 命令中。
the date is Mon May 24 19:15:13 PDT 2021
[root@localhost home]#
$() 和 反引號 區別:
- $()的並不是所有的類unix系統都支持這種方式.
- 反引號
- 多層次的復合替換中 $() 比 `` 更直觀,易理解。
實例:
將 cmd1 執行結果作為 cmd2 參數,再將 cmd2 結果作為 cmd3 的參數
cmd3 $(cmd2 $(cmd1))
如果是用反引號,直接引用是不行的,還需要作跳脫處理
cmd3 `cmd2 \`cmd1\``