Shell 参数置换


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》.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章