妙用字符串的替換和截取讓Shell腳本精準得到你心中的那個“她”


目的

shell腳本中各種條件的判斷,都需要對判定條件精準把控,而字符串在腳本中用的是最多的,怎樣準確的獲取你想要的字符串至關重要。本文詳細介紹了shell腳本中妙用字符串的替換和截取,讓你精準獲得你心中的那個她。


妙用字符串的替換和截取讓Shell腳本精準得到你心中的那個“她”


截斷

例子:file=/dir1/dir2/dir3/my.file.txt

<code>#拿掉第一條/及其左邊的字符串${file#*/}結果:dir1/dir2/dir3/my.file.txt #拿掉最後一條/及其左邊的字符串${file##*/}結果:my.file.txt #拿掉第一個.及其左邊的字符串${file#*.}結果:file.txt  #拿掉最後一個.及其左邊的字符串${file##*.}結果:txt#拿掉最後條/及其右邊的字符串${file%/*}結果:/dir1/dir2/dir3#拿掉第一條/及其右邊的字符串${file%%/*}結果:(空值)#拿掉最後一個.及其右邊的字符串${file%.*}結果:/dir1/dir2/dir3/my.file#拿掉第一個.及其右邊的字符串${file%%.*}結果:/dir1/dir2/dir3/my/<code>

記憶方法很簡單:

#表示去掉左邊, ##去掉最後一個

%表示去掉右邊, %%去掉第一個


提取

單一符號是最小匹配,兩個符號是最大匹配。

<code>#提取最左邊的 5 個字節${file:0:5/dir1${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2/<code> 

替換

<code>#將第一個 dir 提換為 path${file/dir/path}結果:/path1/dir2/dir3/my.file.txt#將全部 dir 提換為 path${file//dir/path}結果:/path1/path2/path3/my.file.txt/<code>


針對不同的變量狀態賦值(沒設定、空值、非空值):

<code>#若$file沒有設定,則使用my.file.txt作返回值。(空值及非空值時不作處理)${file-my.file.txt}#若$file沒有設定或為空值,則使用my.file.txt作返回值。(非空值時不作處理)${file:-my.file.txt}#若$file設為空值或非空值,均使用my.file.txt作返回值。(沒設定時不作處理)${file+my.file.txt}#若$file為非空值,則使用my.file.txt作返回值。(沒設定及空值時不作處理)${file:+my.file.txt}#若$file沒設定,則使用my.file.txt作返回值,同時將$file 賦值為 my.file.txt。(空值及非空值時不作處理)${file=my.file.txt}#若$file沒設定或為空值,則使用my.file.txt作返回值,同時將 $file 賦值為 my.file.txt。(非空值時不作處理)${file:=my.file.txt}#若$file沒設定,則將my.file.txt輸出至 STDERR。(空值及非空值時不作處理)${file?my.file.txt}#若$file沒設定或為空值,則將my.file.txt輸出至STDERR。(非空值時不作處理)${file:?my.file.txt}注意: ":+"的情況是不包含空值的.":-", ":="等只要有號就是包含空值(null)./<code>

變量的長度

<code>${#file}/<code>

數組運算

<code>A=(a b c def)${A[@]} 或 ${A[*]} #可得到 a b c def (全部組數)${A[0]} #可得到 a (第一個組數),${A[1]} 則為第二個組數...${#A[@]} 或 ${#A[*]} #可得到 4 (全部組數數量)${#A[0]} #可得到 1 (即第一個組數(a)的長度),${#A[3]} 可得到 3 (第四個組數(def)的長度)/<code> 


分享到:


相關文章: