Shell-Script

使用 POSIX 參數擴展從變數中刪除重複的字元串模式

  • October 7, 2022

我想使用2.6.2 參數擴展從字元串中刪除前導字元,但驚訝地發現“刪除最大前綴模式”不會自動重複該模式。

$ x=aaaaabc
$ printf %s\\n "${x##a}"
aaaabc

如您所見,僅a刪除了第一個。預期輸出為、、或中bc的任何一個。x=bc``x=abc``x=aabc``x=aaabc``x=aaaabc

如果我想a$x. 我也沒有運氣搜尋其他執行緒,因為許多答案都使用 bash,但我正在尋找 POSIX shell 解決方案。

我認為您不能以通用方式(忽略模式的特定特徵)僅使用 POSIX shell 構造而不使用循環來執行此操作:

until [ "${x#a}" = "$x" ]; do x="${x#a}"; done

對於某些模式,您可以通過匹配要保留的變數部分來“反轉”模式:

$ for x in "" a aa abc aabc aaabc aaabca aaabcabc bc bcaa
> do
>     printf %s\\n "${x#"${x%%[!a]*}"}"
> done



bc
bc
bc
bca
bcabc
bc
bcaa

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