假設咱們定義了一個變量爲: file=/dir1/dir2/dir3/my.file.txt 咱們能夠用 ${ } 分別替換得到不一樣的值: ${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 記憶的方法爲: # 是去掉左邊(在鑑盤上 # 在 $ 之左邊) % 是去掉右邊(在鑑盤上 % 在 $ 之右邊) 單一符號是最小匹配﹔兩個符號是最大匹配。 ${file:0:5}:提取最左邊的 5 個字節:/dir1 ${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2 咱們也能夠對變量值裏的字符串做替換: ${file/dir/path}:將第一個 dir 提換爲 path:/path1/dir2/dir3/my.file.txt ${file//dir/path}:將所有 dir 提換爲 path:/path1/path2/path3/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 定義爲非空值。 (保留空值及非空值) ${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。 (保留非空值) 還有,${#var} 可計算出變量值的長度: ${#file} 可獲得 27 ,由於 /dir1/dir2/dir3/my.file.txt 恰好是 27 個字節...