Linux程式設計實務 - Ch7
- 判斷字串
echo ${var:+'New_Value'} # 若$var存在,回傳New_Value echo ${var:-'New_Value'} # 若$var不存在,回傳New_Value echo ${var:='New_Value'} # 若$var為空值,則設為New_Value echo ${var:?'New_Value'} # 若$var有問題,回傳New_Value echo ${var::'New_Value'} # 若$var空值,回傳New_Value
- 比較取代
$(var#pattern) # 由前比對,刪最短的 $(var##pattern) # 由前比對,刪最長的 $(var%pattern) # 由後比對,刪最短的 $(var%%pattern) # 由前比對,刪最長的 ex: s="/usr/sbin/ntpdate" ${s#/*/} # sbin/ntpdate ${s##/*/} # ntpdate ${s%/*} # /usr/sbin ${s%%/*} # 空
字串取代
格式: ${var/pattern/replacement} # 取代第一個 ${var//pattern/replacement} # 取代全部 ex: act="mail:x:8:8:mail:/var/mail:/bin/sh" ${act/:/,} # mail,x:8:8:mail:/var/mail:/bin/sh ${act//:/,} # mail,x,8,8,mail,/var/mail,/bin/sh
找檔案副檔名
${filename##*.}
- printf
# 格式化字串 echo $(printf '%04d' 80) # 0080 # 縮排80pixels printf "%*s%s" 80 "OK" # ___(80pixels)___OK # 印在螢幕最右 printf "%${COLUMN}s" "[OK]" # 在shell內要用$(tpus cols) # 16進位轉10進位輸出 printf '%d' 0x15a # 或 echo $((0x15a)) # 10進位轉16進位輸出 printf '%x' 346