標籤:
Shell 處理字串和{}操作
1. 擷取變數的長度
擷取字串長度的方法大概有4種:(以hello world 為例)
通過 wc -L
$ echo "hello world" | wc -L 11
通過expr length string
$ expr length "hello world"11
通過awk內建的length函數
$ echo "hello world" | awk ‘{print length($0)}‘11
通過echo ${#string_name}
$ string=‘hello world‘$ echo ${#string}11
2. 截取變數 by {}操作
注意: 這裡需要用*來匹配,否則就像最後一個一樣無效,另外倒數第二中把開頭的空格去掉了,這個應該是shell的一種預設賦值,會將變數開頭的空格去掉。例如:
$str1=" hello"$echo $str1hello
注意:
左邊第一個下標用 0 表示
右邊第一個下表用 0-1 表示,右邊第二個用 0-2 表示, 依次類推n 表示字元的個數,不是下標
${string:3}
這裡的3表示從左邊第4個開始
$echo $stringhello world$echo ${string:0:2}he$echo ${string:0-2:2}ld$echo ${string:2}llo world
3. 參數替換和擴充 -- by {} 操作
${str-value}
如果str沒有被申明,則賦值value
${str:-value}
如果str沒有被申明或者值為空白,則賦值value
$var=$echo ${var-helo} -- 此時變數var為空白$echo ${var:-helo}helo
${str+value} 如果不管str為何值,均使用value作為預設值
${str:+value} 除非str為空白,否則均使用value作為預設值
${str=value} 如果str沒有被申明,則使用value作為預設值,同時將str賦值為value
${str:=value} 如果str沒有被申明,或者為空白,則使用value作為預設值,同時將str賦值為value
${str?value} 如果str沒有被申明,輸出value到STDERR
${str:?value} 如果str沒有被申明,或者為空白,輸出value到STDERR
${!var}
間接變數引用
$echo $stringhello world$str="string"$echo ${!str}hello world
${!prefix*}
匹配之前所有以prefix開頭申明的變數
${[email protected]}
匹配之前所有以prefix開頭申明的變數
$cat test.sh c_var1="hello"c_var2="world"for c in ${!c_*}; do echo "${c}=${!c}"done$sh test.sh c_var1=helloc_var2=world
4. 字串替換 -- by {}操作
${string/str1/str2}
,用str2替換從左邊數第一個str1
${string//str1/str2}
,用str2替換全部str1
${string/#str1/str2}
,如果string的首碼是str1,則將其替換為str2
${string/%str1/str2}
,如果string的尾碼是str1,則將其替換為str2
$echo ${string/l/s}heslo world$echo ${string//l/s}hesso worsd$echo ${string/#he/h}hllo world$echo ${string/%ld/d}hello word
Shell 處理字串和{}操作