關于${ }的用法-Linux shell程式設計小記
1.替換、裁剪
在shell程式設計中,當遇到需要将某個字元串進行替換或者裁剪時,我們首先想到的是sed和awk,但是sed和awk的功能都太強大了,當隻是簡單的對某個字元串進行替換裁剪時,我們可以使用${}來完成。
替換
替換的格式為 ${變量/|//被替換字元/替換字元}
file=/home/test/test.sh
#将第一個test替換為tty1
filename=${file/test/tty1}
#将所有的test替換為tty1
filename=${file//test/tty1}
裁剪
裁剪的格式為${變量#(##)|%(%%)正規表達式}
#删除第一個/左邊的所有字元
filename=${file#*/}
#删除第一個/右邊的所有字元
filename=${file%/*}
#删除最後一個/左邊所有字元
filename=${file##*/}
#删除最後一個/右邊所有字元
filename=${file%%/*}
例子中/可以按照實際要求更換,例如
#删除第一個.左邊的字元
filename=${file#*.}
如果字元串有規律,隻需要輸出固定位置的字元串,可以使用${變量:起始位置:長度}
#取出字元串第3-7個字元
filename=${file:2:4}
echo ${filename}
#>ome/
有個小技巧,在你無法分辨左右與符号對應時,可以看看鍵盤

#在$的左邊,是以是删除分隔符左邊的内容;%在$的右邊,是以是删除分隔符右邊的内容
2.針對不同狀态指派
在程式設計時,如果使用者沒有在要求位置輸入内容或在運作中某個變量沒有擷取到值,可能會造成腳本出現停止或其他錯誤,是以在程式設計時需要對一些變量進行限制。
表達式 | 沒設定 | 空值 | 非空值 |
---|---|---|---|
${file-host} | 使用host作傳回值 | 不處理 | 不處理 |
${file:-host} | 使用host作傳回值 | 使用host作傳回值 | 不處理 |
${file=host} | 使用host作傳回值且将file指派為host | 不處理 | 不處理 |
${file:=host} | 使用host作傳回值且将file指派為host | 使用host作傳回值且将file指派為host | 不處理 |
${file?host} | 將host輸出至STDERR | 不處理 | 不處理 |
${file:?host} | 將host輸出至STDERR | 將host輸出至STDERR | 不處理 |
${file+host} | 不處理 | 使用host作傳回值 | 使用host作傳回值 |
${file:=host} | 不處理 | 不處理 | 使用host作傳回值 |
針對不同要求,可以選擇不同的表達式對值進行控制,來保證變量的值。
3.計數
通過${#變量}可以對變量的長進行計數:
echo ${#file}
#>18
#因為file總共有18個字元