#號截取,從左邊開始,以一個出現的分隔符(最左)爲準,刪除左邊字符。spa
##號截取,從左邊開始,以最後(最右)一個分隔符爲準,刪除左邊字符。3d
str='hello world' echo ${str#*l} echo ${str##*l}
echo ${str##*llo}
#*l 表示從左邊開始刪除第一個出現的w左邊的全部字符。##*l 表示從左邊開始刪除最後一個出現的w左邊的全部字符。code
%號截取,從右邊開始,以一個出現的分隔符(最右)爲準,刪除右邊字符。blog
%%號截取,從右邊開始,以最後一個出現的分隔符(最左)爲準,刪除右邊字符。字符串
str='hello world' echo ${str%l*} echo ${str%%l*}
echo ${str%lo*}
%l* 表示從右邊開始刪除第一個出現的w右邊的全部字符。%%l* 表示從右邊開始刪除最後一個出現的w右邊的全部字符。class
字符串切片:${var:offset:length}awk
str='hello world' echo ${str:0:7} #從第0個字符開始,截取7個字符。 echo ${str:7} #從左邊開始第七個字符,一直到結束。 echo ${str:0-7:2} #從右邊開始第七個字符,截取2個字符。 echo ${str:0-7:3} #從右邊開始第七個字符,截取3個字符。 echo ${str:0-7} #從右邊開始第七個字符,一直到結束。
str='hello world' echo ${str:0:-2} #從第0個字符開始,一直到倒數第二個字符。 echo ${str:0-7:-2} #從右往做數的第七個字符開始,一直到倒數第二個字符。 echo ${str:4:-2} #從第四個字符開始,一直到倒數第二個字符。 echo ${str: -2} #從右邊開始(倒數)第二個字符,一直到最後。注意冒號後有空格,等效於${str:0-2}。
${var/pattern/substi}:查找var所表示的字串中,第一次被Pattern匹配到的字串,並以substi替換之。變量
${var//patten/substi}:查找var所表示的字串中,全部被Pattern匹配到的字串,並以substi替換之。方法
${var/#pattern/substi}:以行首錨定的方式將pattern匹配至var所表示的字串上,若是能匹配,則以substi替換之。im
${var/%pattern/substi}:以行尾錨定的方式將pattern匹配至var所表示的字串上,若是能匹配,則以substi替換之。
以上都可使用?, *元字符。
str='hello world' echo ${str/l/e} echo ${str//l/e} echo ${str/#l/e}
echo ${str/#hel/e}
echo ${str/%ld/e}
echo ${str/h*o/hi}
echo ${str/h??/eee}
${var/pattern}:替換爲空,即刪除pattern匹配到的第一次出現。
${var//pattern}: 刪除pattern匹配到的全部出現。
${var/#pattern}
${var/%pattern}
使用方法同上。
${var^^}:小寫-->大寫
${var,,}:大寫-->小寫
str='hello WORLD' echo ${str^^} echo $str | tr '[a-z]' '[A-Z]' echo ${str,,} echo $str | tr '[A-Z]' '[a-z]'
大小寫轉換的方式不少,還包括 declare、awk等。
有無冒號存在細微差異
一般用來表示變量是否有值(定義且非空)。
${var:-word}: 若是var爲空或未設置,那麼返回word;不然,則返回var中的值;
${var:=word}:若是var爲空或未設置,那麼返回word,而且將word賦值給var;不然,返回var中的值;
${var:?err_info}:若是var爲空或未設置,那麼返回錯誤信息;不然,則返回var自身的值;
${var:+word}:若是var自身有正常數據,則返回word;
str='hello world' echo ${str:-word} str='' echo ${str:-word} echo ${str:=word} echo $str echo ${str:?error} str='' echo ${str:?error} echo $? #查看上條命令是否返回錯誤信息 echo ${str:+word} str='asdas' echo ${str:+word}
若去掉冒號則表示變量爲空也視爲變量有正常值存在。一般用來表示變量是否認義。
str='hello world' echo ${str-word} str='' echo ${str-word} echo ${strr-word} echo $str echo ${str?error} echo ${strr?error} echo $? #查看上條命令是否返回錯誤信息