基本下面引用的文章,加了幾項, 做個記錄,懶得記了,也省得每次Google。
http://my.oschina.net/aiguozhe/blog/41557
1. 取長度
好像一般使用第二種
2. 尋找子串的位置
2 |
expr index $str "a" # 1 |
3 |
expr index $str "b" # 2 |
4 |
expr index $str "x" # 0 |
3. 選取子串
2 |
expr substr "$str" 1 3 # 從第一個位置開始取3個字元, abc |
3 |
expr substr "$str" 2 5 # 從第二個位置開始取5個字元, bcdef |
4 |
expr substr "$str" 4 5 # 從第四個位置開始取5個字元, def |
6 |
echo ${str:2} # 從第二個位置開始提取字串, bcdef |
7 |
echo ${str:2:3} # 從第二個位置開始提取3個字元, bcd |
8 |
echo ${str:(-2)} # 從倒數第二個位置向左提取字串, abcde |
9 |
echo ${str:(-2):3} # 從倒數第二個位置向左提取6個字元, cde |
4. 截取子串
01 |
str="abbc,def,ghi,abcjkl" |
02 |
echo ${str#a*c} # ,def,ghi,abcjkl 一個井號(#) 表示從左邊截取最短的匹配 |
03 |
echo ${str##a*c} # jkl, 兩個井號(##) 表示從左邊截取最長的匹配 |
04 |
echo ${str#"a*c"} # 空,因為str中沒有子串"a*c" |
05 |
echo $[str##"a*c"} # 空,同理 |
06 |
echo ${str#d*f) # abbc,def,ghi,abcjkl, |
07 |
echo ${str#*d*f} # ,ghi,abcjkl |
09 |
echo ${str%a*l} # abbc,def,ghi 一個百分比符號(%)表示從右邊截取最短的匹配 |
10 |
echo ${str%%b*l} # a 兩個百分比符號表示(%%)表示從右邊截取最長的匹配 |
11 |
echo ${str%a*c} # abbc,def,ghi,abcjkl |
可以這樣記憶, 井號(#)通常用於表示一個數字,它是放在前面的;百分比符號(%)卸載數位後面;
或者這樣記憶,在鍵盤配置中,井號(#)總是位於百分比符號(%)的左邊(即前面) :-)
5. 字串替換
1 |
str="apple, tree, apple tree" |
2 |
echo ${str/apple/APPLE} # 替換第一次出現的apple |
3 |
echo ${str//apple/APPLE} # 替換所有apple |
5 |
echo ${str/#apple/APPLE} # 如果字串str以apple開頭,則用APPLE替換它 |
6 |
echo ${str/%apple/APPLE} # 如果字串str以apple結尾,則用APPLE替換它 |
6. 比較
*單組[]是可以的。
1 |
[[ "a.txt" == a* ]] # 邏輯真 (pattern matching) |
2 |
[[ "a.txt" =~ .*\.txt ]] # 邏輯真 (regex matching) |
3 |
[[ "abc" == "abc" ]] # 邏輯真 (string comparision) |
4 |
[[ "11" < "2" ]] # 邏輯真 (string comparision), 按ascii值比較 |
7. 串連
3 |
echo ${s1}${s2} # 當然這樣寫 $s1$s2 也行,但最好加上大括弧 |
8. 在變數中儲存指令執行的結果
*注意兩邊不是單引號。
9. 分割字串到一個數組中
1 |
arguments=($(echo ${x} | tr "," "\n")) #x為傳入參數,以逗號分隔 |
10. 大小寫轉換
debPackName=`echo $2|awk '{print tolower($0)}'`
#轉為小寫
debPackName=`echo $2|awk '{print toupper($0)}'`
#轉為大寫