字符串操作之一:測試變量存在性
${varname:-word} | 如果varname存在且非null,返回其值,否則返回word |
${varname:=word} | 如果varname存在且非null,返回其值,否則將其設置爲word,然後返回其值 |
${varname:?message} | 如果varname存在且非null,返回其值,否則打印varname:後跟message,並退出當前命令或腳本 |
${varname:+word} | 如果varname存在且非null,返回word,否則返回null |
${varname:offset} | 偏移offset個字符,取餘下的所有字符 |
${varname:offset:length} | 偏移offset個字符,取length個字符 |
# echo ${age:-30} //變量age未設置,返回30 30 # age=28 # echo ${age:-30} //變量age設置爲28,返回28 28 # name=king # echo ${name:=tom} //變量name已設置爲king,故返回king king # unset name # echo ${name:=tom} //變量name被清空,未設置,則將變量name設置爲tom tom # echo $name tom # echo ${sex:?"what's your sex?"} -bash: sex: what's your sex? //變量sex未設置顯示what's your sex? # sex=female # echo ${sex:?"what's your sex?"} //變量sex已設置,顯示female female # echo ${id:+"not null"} //變量id未設置,返回Null # id=100 # echo ${id:+"not null"} //變量id已設置,返回消息not null not null # echo ${msg:5} //偏移5個字符,取餘下的所有字符 World # echo ${msg:5:2} //偏移5個字符,取兩個字符 Wo
字符串操作之二:計算變量中的字符個數
${#varname}
# echo $msg HelloWorld # echo ${#msg} 10
字符串操作之三:使用模式和模式匹配來操作字符串
${varname#pattern} | 如果模式匹配變量取值的開頭,刪除最短的匹配部分,並返回其餘部分 |
${varname##pattern} | 如果模式匹配變量取值的開頭,刪除最長的匹配部分,並返回其餘部分 |
${varname%pattern} | 如果模式匹配變量取值的結尾,刪除最短的匹配部分,並返回其餘部分 |
${varname%%pattern} | 如果模式匹配變量取值的結尾,刪除最長的匹配部分,並返回其餘部分 |
${varname/pattern/string} | 用string替換第一個匹配pattern的部分 |
${varname//pattern/string} | 用string替換所有pattern匹配的部分 |
# Var=/etc/sysconfig/network-scripts/ifcfg-eth0 # echo $Var /etc/sysconfig/network-scripts/ifcfg-eth0 # echo ${Var#/*/} sysconfig/network-scripts/ifcfg-eth0 # echo ${Var##/*/} ifcfg-eth0 # Var=/home/yy/test.conf.bak # echo $Var /home/yy/test.conf.bak # echo ${Var%.*} /home/yy/test.conf # echo ${Var%%.*} /home/yy/test # echo $msg HelloWorld # echo ${msg/o/O} HellOWorld # echo ${msg//o/O} HellOWOrld