[ 使用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
これを使用する必要があります。on
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 組み込みコマンドを使用してシェル オプションを有効にすると、いくつかの拡張パターン マッチング演算子が認識されます […]
答え2
どうやら、機械の神々は私を笑うのに十分だったようです。Alexey Ten は答えに大きく貢献したと思います。
y= ${ステップ//_[[:alpha:]]+([[:alpha:]])/_}