
Ich versuche, im Rahmen einer Neufassung/Neuorganisation ein Bash-Skript besser zu organisieren und frage mich, was in der folgenden Situation die „beste Vorgehensweise“ ist:
ymd=`echo "${NOEXT}" | egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-"`
oder
ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<< ${NOEXT}`
Ich glaube, dass die erste Version aufgrund der Pipe eine Unterschale erstellt. Tut dies die zweite Version mit der Zeichenfolge hier? Ich gehe davon aus, dass dies nicht der Fall ist, möchte aber meine Annahmen überprüfen.
Antwort1
Bei Letzterem ist dies nicht der Fall, was Sie (grob) überprüfen können, indem Sie (auf einem inaktiven System) den Anstieg der PIDs beobachten – bei Ausführung des Ersten steigt dieser um 2, bei Ausführung des Letzteren nur um 1.
Aber es ist einBashismusund sollte vielleicht durch ein Dokument hier ersetzt werden:
ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<EOF
${NOEXT}
EOF`
Antwort2
Wenn Sie POSIX-Kompatibilität verwenden können bash
und nicht benötigen, können Sie den regulären Ausdrucksabgleich durchführen, ohne den externen Aufruf von zu verwenden egrep
.
[[ $NOEXT =~ -20[0-9]{2}-[0-9]{2}-[0-9]{2}- ]]
ymd=${BASH_REMATCH[0]}