É um subshell executado com uma string aqui?

4

Estou tentando organizar melhor um script bash como parte de uma reescrita / reorganização e estou querendo saber 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}' 

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

    
por Josh Smeaton 08.02.2013 / 10:17

2 respostas

4

O último não é que você pode (grosso modo) verificar olhando (em um sistema ocioso) o aumento dos PIDs - ao executar o primeiro, ele aumentará em 2, ao executar o último, ele só aumentará por 1.

Mas, é um Bashism 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'
    
por 08.02.2013 / 11:42
2

Se você puder usar bash e não exigir compatibilidade POSIX, poderá fazer a correspondência de 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]}
    
por 08.02.2013 / 14:50