字符串操作(長度,讀取,替換)
表達式 |
含義 |
${#string}
$string的長度
${string:position}
在$string中, 從位置$position開始提取子串
${string:position:length}
在$string中, 從位置$position開始提取長度為$length的子串
${string#substring}
從變量$string的開頭, 刪除最短匹配$substring的子串
${string##substring}
從變量$string的開頭, 刪除最長匹配$substring的子串
${string%substring}
從變量$string的結尾, 刪除最短匹配$substring的子串
${string%%substring}
從變量$string的結尾, 刪除最長匹配$substring的子串
${string/substring/replacement}
使用$replacement, 來代替第一個匹配的$substring
${string//substring/replacement}
使用$replacement, 代替
所有匹配的$substring
${string/#substring/replacement}
如果$string的
前綴匹配$substring, 那麼就用$replacement來代替匹配到的$substring
${string/%substring/replacement}
如果$string的
後綴匹配$substring, 那麼就用$replacement來代替匹配到的$substring
字符串操作舉例:
1. 長度
$ string=linuxeye
$ echo ${#string}
8
2. 截取字串
$ string=linuxeye
$ echo ${string:5}
eye
$ echo ${string:0:5} #默認從0開始,可省略,如下
linux
$ echo ${string::5}
linux
3. 字符串刪除
$ redis_file=c:/windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file#/}
c:/windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file#*/}
windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file##*/}
redis-2.8.4.tar.gz
echo ${redis_file%/*}
c:/windows/src
$ echo ${redis_file%%/*}
c:
${變量名#substring正則表達式}從字符串開頭開始配備substring,刪除匹配上的表達式。
${變量名%substring正則表達式}從字符串結尾開始配備substring,刪除匹配上的表達式。
注意:${redis_file##*/},${redis_file%/*} 分別是得到文件名,或者目錄地址最簡單方法。
4. 字符串替換
$ echo ${redis_file/\//\\}
c:\windows/src/redis-2.8.4.tar.gz
$ echo ${redis_file//\//\\}
c:\windows\src\redis-2.8.4.tar.gz
${變量/查找/替換值} 一個"/"表示替換第一個,"//"表示替換所有,當查找中出現了:"/"請加轉義符"\/"表示。
判斷讀取字符串值
表達式 |
含義 |
${var}
變量var的值, 與$var相同
${var-DEFAULT}
如果var沒有被聲明, 那麼就以$DEFAULT作為其值
${var:-DEFAULT}
如果var沒有被聲明, 或者其值為空, 那麼就以$DEFAULT作為其值,判斷var變量是否沒有定義
${var=DEFAULT}
如果var沒有被聲明, 那麼就以$DEFAULT作為其值
${var:=DEFAULT}
如果var沒有被聲明, 或者其值為空, 那麼就以$DEFAULT作為其值 ,判斷var變量是否沒有定義,並確保變量始終有值
${var+OTHER}
如果var聲明了, 那麼其值就是$OTHER, 否則就為null字符串
${var:+OTHER}
如果var被設置了, 那麼其值就是$OTHER, 否則就為null字符串
${var?ERR_MSG}
如果var沒被聲明, 那麼就打印$ERR_MSG
${var:?ERR_MSG}
如果var沒被設置, 那麼就打印$ERR_MSG
${!varprefix*}
匹配之前所有以varprefix開頭進行聲明的變量
${!varprefix@}
匹配之前所有以varprefix開頭進行聲明的變量
判斷讀取字符串值舉例:
$ output=${FILE:-UNSET}
$ echo $output
UNSET
$ FILE=/root/lnmp
$ output=${FILE:-UNSET}
$ echo $output
/root/lnmp
對變量的路徑進行操作時,最好先判斷路徑是否為非空,如下path變量沒有定義,則取/tmp,防止變量沒定義誤刪除:
$ find ${path-/tmp} -name *.tar.gz -type f | xargs rm -f
原文:http://blog.linuxeye.com/390.html