
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 bash
e 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]}