bash大括號參數擴展(Parameter Expansion)

假設咱們定義了一個變量爲:file=/dir1/dir2/dir3/my.file.txtide

字符串截取

按分隔符截取

  • ${file#*/}截取第一個/右邊的字符串 dir1/dir2/dir3/my.file.txtspa

  • ${file##*/}截取最後一個/右邊的字符串 my.file.txtcode

  • ${file%/*}截取最後一個/左邊的字符串 /dir1/dir2/dir3orm

  • ${file%%/*}截取第一個/左邊的字符串 (空值)字符串

總結string

  • #語法爲 # * separator 截取separator右邊的字符串it

  • %語法爲 % separator *截取separator左邊的字符串class

  • 一個#%表示貪婪截取變量

  • 兩個#%標示非貪婪截取file

substring

  • ${file:0:5}0開始,截取5個字符/dir1

  • ${file:5:5}5開始,截取5個字符/dir2

  • ${file::5}0開始,截取5個字符/dir1

總結

substring表達式語法爲${var:pos:length}, 標示對變量varpos開始截取length個字符,pos爲空標示0

字符串替換

  • ${file/dir/path}把第一個dir替換成path/path1/dir2/dir3/my.file.txt

  • ${file//dir/path}把全部dir替換成path/path1/path2/path3/my.file.txt

總結

字符串替換表達式語法爲${var/src/dst}${var//src/dst}。一個/標示替換第一個src兩個//標示替換全部src

默認值

  • ${file-my.file.txt}$file沒有設定,則使用my.file.txt返回,$file空值不作處理

  • ${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並返回,空值不處理

  • ${file:=my.file.txt}:$file沒有設定或者爲空值,則把my.file.txt複製給$file並返回

  • ${file?my.file.txt}:$file沒有設定,把my.file.txt輸出到STDERR, 空值不作處理

  • ${file:?my.file.txt}:$file沒有設定或爲空值,把my.file.txt輸出到STDERR

總結

  • -變量不存在返回默認值

  • +變量存在返回默認值

  • =變量不存在賦值並返回默認值

  • ?變量不存在默認值輸出到STDERR

  • 沒有:未設定爲不存在,空值有意義

  • :未設定和空值均標示不存在

其餘

  • ${#file} 返回字符串長度

  • ${file: -4}返回字符串最後四個字節,注意和${file:-4}的區別

相關文章
相關標籤/搜索