4

Я пытаюсь лучше организовать 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}` 

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

2 ответа2

4

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .