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
記憶的方法爲:

# 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
% 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
單一符號是最小匹配﹔兩個符號是最大匹配。

${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 個字節...
相關文章
相關標籤/搜索