[ mitbash -cx 'a="_IN_workstation"; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' funktioniert teilweise, aber das Fehlen von Klammern verfälscht die Übereinstimmung. Dies deutet darauf hin, dass die Verarbeitung der Klammern das Problem ist, aber ich habe die Arbeit von gesehenGNU Autoconfwas auf etwas anderes hindeutet. Kennt sich jemand mit den internen Vorgängen bei Bash aus? ]
Ich habe ein Problem mit der Eingabe von Werten wie _PREROUTING _POSTROUTING, um alphabetische Zeichen zu entfernen:
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] scheint mir zuzustimmen, meine Bash (5.1) hat nichtShop +patsub_replacementverfügbar für 5.2.
Linux Mint Version und Bash Version sieheSchrittVariable und [Originalskript in]
(Bash hat Probleme mit cmdline nft cmd vs script)
Ich habe es versucht [:alpha:]
, aber beides funktioniert nicht im Skript und selten in der Befehlszeile.
Antwort1
Sie müssen es verwenden shopt -s extglob
, was normalerweise on
für interaktive Shells, aber off
in Skripts der Fall ist.
#!/bin/bash
shopt -s extglob
step=_SOME_under_SCORES
a=${step//_+([a-zA-Z])/_}
echo "[$step]=>[$a]"
$ ./check.sh
[_SOME_under_SCORES]=>[___]
Siehe man bash
SektionMustervergleich:
Wenn dasextglob Die Shell-Option wird mithilfe des integrierten Shopt aktiviert. Mehrere erweiterte Mustervergleichsoperatoren werden erkannt […]
Antwort2
Die Maschinengötter haben anscheinend genug Zeit damit verbracht, mich auszulachen. Ich glaube, Alexey Ten hat wesentlich zur Antwort beigetragen.
y= ${Schritt//_[[:alpha:]]+([[:alpha:]])/_}