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