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

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