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