1. 程式人生 > >Shell參數展開

Shell參數展開

匹配 att 開關 align 展開 log 存在 variable 運算符和

參數展開(parameter expansion)是shell提供變量值在程序中使用的過程。

展開運算符 包括替換運算符和模式匹配運算符

替換運算符

運算符 替換說明 記憶
${varname:-word} 若varname存在且非null,則返回其值;否則返回word。 空則返回word
${varname:=word} 若varname存在且非null,則返回其值;否則,設置varname的值為word,並返回其值。改變變量的值。 空則返回word,並改變變量值
${varname:?message} 若varname存在且非null,則返回它的值;否則,顯示varname: message,並退出當前的命令或腳本。省略message會出現默認信息parameter null or not set。 空則顯示警告,並退出。
${varname:+word} 若varname存在且非null,則返回word;否則,返回null。 非空返回word,空則返回null。

示例:

$ echo ${varname}


$ echo ${varname:var1}


$ echo ${varname:-var1}
var1


$ echo ${varname:+var1}


$ echo ${varname:=var2}
var2


$ echo ${varname:+var1}
var1

$ echo ${varname}

var2

$ echo ${varname:?warning1}
var2

$ varname=

$ echo ${varname}

$ echo ${varname:+var5}


$ echo ${varname}


$ echo ${varname:?warning2}
-bash: varname: warning2

模式匹配運算符

運算符  替換 記憶
${variable#pattern} 如果模式匹配於變量值的開頭處,則刪除匹配的最短部分,並返回剩下的部分。 刪除開頭最短(一個#)部分
${variable##pattern} 如果模式匹配於變量值的開關處,則刪除匹配的最長部分,並返回剩下的部分。 刪除開關最長(兩個#)部分
${variable%pattern} 如果模式匹配於變量值的結尾處,則刪除匹配的最短部分,並返回剩下部分。 刪除結尾最短(一個%)部分
${variable%%pattern} 如果模式匹配於變量值的結尾處,則刪除匹配的最長部分,並返回剩下部分。 刪除結尾最長(兩個%)部分

示例:

$ export myvar=/home/merlin/myfile.log.tail

$ echo ${myvar}
/home/merlin/myfile.log.tail

$ echo ${myvar#/*/}
merlin/myfile.log.tail

$ echo ${myvar##/*/}
myfile.log.tail

$ echo ${myvar%.*}
/home/merlin/myfile.log

$ echo ${myvar%%.*}
/home/merlin/myfile

Shell參數展開