La sustitución de parámetros de Bash (¿baparmsub?) No funciona

La sustitución de parámetros de Bash (¿baparmsub?) No funciona

[ usandobash -cx 'a="_IN_estación de trabajo"; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' funciona parcialmente, pero la falta de paréntesis distorsionará la coincidencia. Entonces esto apunta a que el procesamiento de paréntesis es el problema, pero he visto el trabajo deconfiguración automática de GNUlo que sugiere algo más. ¿Alguien familiarizado con los aspectos internos de bash? ]

Tengo un problema con la alimentación de valores como _PREROUTING _POSTROUTING para eliminar los caracteres del alfabeto:

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] parece estar de acuerdo conmigo, mi bash (5.1) no tienecomprar +patsub_replacementdisponible para 5.2.

versión de linux mint y versión bash verpasovariable y [script original en]
(Bash tiene problemas con cmdline nft cmd vs script)

Lo intenté [:alpha:]pero ninguno funciona en script y rara vez en la línea de comando.

Respuesta1

Tienes que usar shopt -s extglobel cual suele ser onpara shell interactivo, pero offen scripts.

#!/bin/bash
shopt -s extglob

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

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

Mira man bashla secciónLa coincidencia de patrones:

Si elextglob La opción Shell está habilitada usando el shopt incorporado, se reconocen varios operadores de coincidencia de patrones extendidos […]

Respuesta2

Los dioses de las máquinas, al parecer, ya se han reído bastante de mí. Creo que Alexey Ten contribuyó sustancialmente a la respuesta.

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

información relacionada