Bash 參數替換(baparmsub?)不起作用

Bash 參數替換(baparmsub?)不起作用

[ 使用bash -cx 'a =“_IN_workstation”; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' 確實部分有效,但缺少括號會使匹配出現偏差。所以這表明括號處理是問題所在,但我已經看到了GNU 自動配置這表明了其他事情。有人熟悉 bash 內部結構嗎? ]

我在輸入 _PREROUTING _POSTROUTING 之類的值來刪除字母字元時遇到問題:

a=${step/\_+([a-zA-Z]/\_}
[ note: replacing underscore with \x5f does nothing for the script although using sed works via 's/_[a-zA-Z][a-zA-Z]*/_/gp' but that is NOT what i __wanted__]   

(GNU)[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html]似乎同意我的觀點,我的bash確實(5.1)沒有商店 +patsub_replacement適用於 5.2。

linux mint版本和bash版本參見變數和[原始腳本]
(Bash 與 cmdline nft cmd vs 腳本有問題

我嘗試過[:alpha:],但在腳本中都不起作用,而且很少在命令列中起作用。

答案1

您必須使用shopt -s extglob它通常on用於互動式 shell,但off在腳本中。

#!/bin/bash
shopt -s extglob

step=_SOME_under_SCORES
a=${step//_+([a-zA-Z])/_}

echo "[$step]=>[$a]"
$ ./check.sh
[_SOME_under_SCORES]=>[___]

參見man bash部分模式匹配

如果外部全域變數 使用內建的 shopt 啟用 shell 選項,可以識別幾個擴展模式匹配運算符 [...]

答案2

顯然,機器之神已經受夠了嘲笑我了。我相信阿列克謝·十確實對這個答案做出了重大貢獻。

y= ${步驟//_[[:alpha:]]+([[:alpha:]])/_}

相關內容