假設定義了一個變數為,代碼如下: 可以用${ }分別替換得到不同的值: 記憶的方法為: # 是 去掉左邊(鍵盤上#在 $ 的左邊)% 是去掉右邊(鍵盤上% 在$ 的右邊)單一符號是非貪婪匹配;兩個符號是貪婪匹配 ${file:0:5}:提取最左邊的 5 個位元組:/dir1${file:5:5}:提取 ...
假設定義了一個變數為,代碼如下:
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
[root@localhost ~]# p=123abc
[root@localhost ~]# echo ${p//[0-9]/} #將變數中的數字替換為空
abc
+----------------------------------------------------------------------+
|Form Meaning
+----------------------------------------------------------------------+
|${variable:?word} Complain if undefined or null
|${variable:-word} Use new value if undefined or null
|${variable:+word} Opposite of the above
|${variable:=word} Use new value if undefined or null, and redefine.
+----------------------------------------------------------------------+
foo=${bar:-something} echo $foo # something echo $bar # no assignement to bar, bar is still empty foo=${bar:=something} echo $foo # something echo $bar # something too, as there's an assignement to bar