
Estoy tratando de organizar mejor un script bash como parte de una reescritura/reorganización y me pregunto cuál es la "mejor práctica" en la siguiente situación:
ymd=`echo "${NOEXT}" | egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-"`
o
ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<< ${NOEXT}`
Creo que la primera versión, debido a la tubería, crea una subcapa. ¿La segunda versión con la cadena aquí? Supongo que no es así, pero quiero validar mis suposiciones.
Respuesta1
Esto último no es así, lo cual puede verificar (aproximadamente) observando (en un sistema inactivo) el aumento de los PID: cuando se ejecuta el primero, aumentará en 2, cuando se ejecuta el segundo, solo aumentará en 1.
Pero es unBashismo, y tal vez debería reemplazarse con un documento aquí:
ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<EOF
${NOEXT}
EOF`
Respuesta2
Si puede usar bash
y no requiere compatibilidad con POSIX, puede hacer la coincidencia de expresiones regulares sin usar la llamada externa a egrep
.
[[ $NOEXT =~ -20[0-9]{2}-[0-9]{2}-[0-9]{2}- ]]
ymd=${BASH_REMATCH[0]}