Um subshell é executado com uma string here?

Um subshell é executado com uma string here?

Estou tentando organizar melhor um script bash como parte de uma reescrita/reorganização e estou me perguntando qual é a "melhor prática" na seguinte situação:

ymd=`echo "${NOEXT}" | egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-"`

ou

ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<< ${NOEXT}` 

Acredito que a primeira versão, devido ao pipe, cria um subshell. A segunda versão com a string here? Acho que não, mas quero validar minhas suposições.

Responder1

O último não funciona, o que você pode verificar (aproximadamente) observando (em um sistema inativo) o aumento dos PIDs - ao executar o primeiro, aumentará em 2, ao executar o último, aumentará apenas em 1.

Mas, é umBashismo, e talvez deva ser substituído por um documento aqui:

ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<EOF
${NOEXT}
EOF`

Responder2

Se você puder usar bashe não precisar de compatibilidade com POSIX, poderá fazer a correspondência da expressão regular sem usar a chamada externa para egrep.

[[ $NOEXT =~ -20[0-9]{2}-[0-9]{2}-[0-9]{2}- ]]
ymd=${BASH_REMATCH[0]}

informação relacionada