假設咱們定義了一個變量爲:file=/dir1/dir2/dir3/my.file.txt
ide
${file#*/}
截取第一個/
右邊的字符串 dir1/dir2/dir3/my.file.txt
spa
${file##*/}
截取最後一個/
右邊的字符串 my.file.txt
code
${file%/*}
截取最後一個/
左邊的字符串 /dir1/dir2/dir3
orm
${file%%/*}
截取第一個/
左邊的字符串 (空值)字符串
總結string
#
語法爲 # * separator
截取separator
右邊的字符串it
%
語法爲 % separator *
截取separator
左邊的字符串class
一個#
或%
表示貪婪截取變量
兩個#
或%
標示非貪婪截取file
${file:0:5}
從0
開始,截取5
個字符/dir1
${file:5:5}
從5
開始,截取5
個字符/dir2
${file::5}
從0
開始,截取5
個字符/dir1
總結
substring
表達式語法爲${var:pos:length}
, 標示對變量var
從pos
開始截取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}
的區別