1、單獨的${parameter},可以拓展變量
my_id=${USER}-on-${HOSTNAME} echo "$my_id" #root-on-localhost.localdomain echo echo "Old \$PATH = $PATH" #Old $PATH = /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin PATH=${PATH}:/opt/sh echo "New \$PATH = $PATH" #New $PATH = /usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/opt/sh
2、${parameter-default},${parameter:-default} 使用變量默認值
兩種用法基本相同,在變量未設置的時候都能夠使用默認變量
var1=1 #var2 is unset var3=3; echo ${var1-$var3} " " ${var2-$var3} #1 3 echo ${var1:-$var3} " " ${var2:-$var3} #1 3
兩者的區別在於當變量聲明但是未賦值的時候,前者不會發生置換,而後者會
var1=1 var2= #var2 is declared but null var3=3; echo ${var1-$var3} " " ${var2-$var3} #1 echo ${var1:-$var3} " " ${var2:-$var3} #1 3
3、${parameter=default},${parameter:=default} 設置變量爲默認值
在變量未聲明或者賦值的時候使用默認值,兩者區別和上面類似
4、${parameter+default},${parameter:+default}
這個與上面相反,如果變量被設置了就用默認值,否則就使用空字符串。應該能夠用到的地方很少吧。
5、${parameter?err_msg},${parameter:?err_msg}
如果變量未設置就打印錯誤信息並且退出腳本(exit 1)
可以用來檢測是否輸入位置變量
$./usage-message.sh :${1?"Usage: $0 ARGUMENT"} #usage-message.sh: line 1: 1: Usage: tmp.sh ARGUMENT #===================================================== $./usage-message.sh 123 :${1?"Usage: $0 ARGUMENT"} #./usage-message.sh: line 1: :123: command not found echo "command-line parameter = \"$1\" " #command-line parameter = "123"
以上例子參考 《Advanced Bash-Scripting Guide》.