Bash
Bash 一步結合替換和子字元串提取
對於這種格式的字元串:
./my-site.sub.domain.com
我想刪除
.
,-
和/
, 並將剩餘部分修剪為 16 個字元:mysitesubdomainc
我已經做到了
mysite="./my-site.sub.domain.com" mysite=${mysite//[\.|\/|-]//} mysite=${mysite:0:16} echo $mysite mysitesubdomainc
有沒有辦法將替換和子字元串提取結合起來?
沒有辦法連結 Bash 內置參數擴展,但當然這可以使用外部工具在一行中完成,例如
sed
:$ sed 's/[\.\/-]//g;s/^\(.\{16\}\).*/\1/' <<< "./my-site.sub.domain.com" mysitesubdomainc
不幸的是,這很快就會變成不可維護的程式碼,並且可能比使用 Bash 內部效率低,所以我建議不要這樣做。
為什麼不使用 zsh?
$ echo ${${mysite//[\.\/-]/}:0:16} mysitesubdomainc
(我稍微修改了你的程式碼)