Shell-Script
使用 POSIX 參數擴展從變數中刪除重複的字元串模式
我想使用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