Bash

Bash 一步結合替換和子字元串提取

  • September 25, 2014

對於這種格式的字元串:

./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

(我稍微修改了你的程式碼)

引用自:https://unix.stackexchange.com/questions/157572