當要引用一個變量的值時,通常推薦使用雙引號。使用雙引號除了變量名[2]前綴($)、後引符(`)和轉義符(\)外,會使shell再也不解釋引號中其它全部的特殊字符。[3] 用雙引號時$仍被當成特殊字符,容許引用一個被雙引號引發的變量("$variable"), 那也是說$variable會被它的值所代替。web
用雙引號還能使句子不被分割開. [4] 一個參數用雙引號引發來能使它被看作一個單元,這樣即便參數裏面包含有空白字符也不會被shell分割開了。shell
單引號(' ')和雙引號相似,但它不容許解釋變量引用,所以,在單引號內的字符$的特殊意思無效了。在單引號內,除了字符',每一個特殊字符都只是字面的意思。單引號(全局引用)比雙引號(部分引用)更嚴格的處理引用部分。bash
感嘆號(!)稱之爲事件指示器 (event designator) ,用以對.bash_history中的某個命令行條目的引用。 spa
!! 引用上一條命令。這是 `!-1' 的同義詞。
!string
引用最近的以 string 開始的命令。
!?string[?]
命令行
引用最近的包含 string 的命令。尾部的 ? 能夠被忽略,若是 string 以後緊接着一個新行符。事件
在命令行上,把感嘆號"!"放在雙引號裏執行命令會出錯(譯者注:好比說:echo "hello!"). 由於感嘆號被解釋成了一個歷史命令. 然而在一個腳本文件裏,這麼寫則是正確的,由於在腳本文件裏Bash的歷史機制被禁用了。 ip
root@test-desktop:/home/James/mypro/Linux-Pro/Network# !!string
lsit
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~event
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$CLASSPATH"
.:/lib:/opt/jdk1.5.0_22/jre/lib:
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$CLASSPATH'
$CLASSPATH
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(ls)"
hostname_to_ip
hostname_to_ip.c
hostname_to_ip.c~
ip_to_hostname
ip_to_hostname.c
ip_to_hostname.c~
Makefile
Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$(ls)'
$(ls)
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"
-bash: !: event not found
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '!'
!
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo !
!
root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"
-bash: !: event not found
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!!"
echo "ls"
ls
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"
echo "$(echo "ls")"
ls
root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"
echo "$(ls)"
hostname_to_ip
hostname_to_ip.c
hostname_to_ip.c~
ip_to_hostname
ip_to_hostname.c
ip_to_hostname.c~
Makefile
Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network#