Подстановка параметров 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 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разделСопоставление с образцом:

Еслиextglob опция оболочки включена с помощью встроенной функции shopt, распознаются несколько расширенных операторов сопоставления с шаблоном […]

решение2

Боги машин, судя по всему, уже достаточно посмеялись надо мной. Алексей Тен внес существенный вклад в ответ, как я считаю.

y= ${шаг//_[[:альфа:]]+([[:альфа:]])/_}

Связанный контент