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_replacement5.2 で利用可能。

Linux Mintバージョンとbashバージョンを参照してくださいステップ変数と[元のスクリプト]
Bash には cmdline nft cmd vs script の問題がある

試してみました[:alpha:]が、どちらもスクリプトでは機能せず、コマンド ラインではほとんど機能しません。

答え1

通常は対話型シェル用ですが、スクリプトではshopt -s extglobこれを使用する必要があります。onoff

#!/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 組み込みコマンドを使用してシェル オプションを有効にすると、いくつかの拡張パターン マッチング演算子が認識されます […]

答え2

どうやら、機械の神々は私を笑うのに十分だったようです。Alexey Ten は答えに大きく貢献したと思います。

y= ${ステップ//_[[:alpha:]]+([[:alpha:]])/_}

関連情報