Shell ${} 變量使用技巧

shell ${}的用法

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

記憶方法爲:

#是去掉左邊的字符;在鍵盤上#是在$之左邊

%是去掉右邊的字符;在鍵盤上%是在$之左邊

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

PS: ${file#/} (不加*)表示只去掉最左邊的一個"/"

上邊的語法不僅可以處理 "/" ".",可以處理任何字符。


${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賦值爲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


上邊的理解在於,分清楚 unset null non-null 這三種賦值狀態:

一般而言, : null 有關,若不帶 : 的話,null不受影響,若帶 : 則連null 也受影響。


計算變量的長度

${#file} 可得到27


數組的處理方法

A = "a b c def",這樣的變量是將$A替換成一個單一的字符串

A=(a b c def),則是將$A定義爲數組

bash的數組替換方法可參考如下:

${A[@]} 或者 ${A[*]} 可得到 a b c def

${A[0]} 可得到a(第一個元素)${A[1]} 則爲第二個元素

${#A[@]}或者${#A[*]} 可得到4(所包含的元素個數)

${#A[0]} 可得到1(即第一個元素(a)的長度)

A[3]=xyz 則是將第四個元素重新定義爲 xyz



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章