Выполняется ли подоболочка со строкой here?

Выполняется ли подоболочка со строкой here?

Я пытаюсь лучше организовать bash-скрипт в рамках его переписывания/реорганизации и мне интересно, что является «лучшей практикой» в следующей ситуации:

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

или

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

Я считаю, что первая версия, из-за конвейера, создает подоболочку. А вторая версия со строкой here? Я полагаю, что нет, но хочу проверить свои предположения.

решение1

Последнее не так, в чем вы можете (приблизительно) убедиться, посмотрев (на неработающей системе) на увеличение PID — при запуске первого он увеличится на 2, при запуске второго — только на 1.

Но этоБашизм, и, возможно, его следует заменить на вот этот документ:

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

решение2

Если вы можете использовать bashи вам не требуется совместимость с POSIX, вы можете выполнить сопоставление регулярных выражений без использования внешнего вызова egrep.

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

Связанный контент