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》.
原文:http://callmepeanut.blog.51cto.com/7756998/1379847