Ich habe eine Datei /tmp/gish.dat
, die entweder eine Zahl (mehr als 0, und eine oder mehrere Ziffern) oder nichts enthält.Bash regulärer Ausdruck stimmt nicht überein, wenn
Wenn eine Nummer vorhanden ist, möchte ich, dass meine Funktion eine #
zusammen mit der Nummer (z. B. #64
) widergibt. Wenn keine Nummer vorhanden ist, möchte ich, dass meine Funktion nichts tut.
get_issue() {
if [ -f "/tmp/gish.dat" ]
then
iss=$(cat /tmp/gish.dat | grep -Eo '[0-9]+')
if [[ iss =~ '[0-9]+' ]]
then
echo "#$iss"
fi
fi
}
Aus irgendeinem Grund stimmt die innere wenn nie überein. Sehr neu zu bash.
get_issue() {
if [ -f "/tmp/gish.dat" ]
then
iss=$(grep -Eo '[0-9]+' /tmp/gish.dat)
if [[ $iss ]]
then
echo "#$iss"
fi
fi
}
Da grep -Eo
Extrakte nur der passende numerische Teil, gibt es keine Notwendigkeit, den extrahierten String gegen die Regex in if
wieder zum Spiel:
Denken Sie einen Dollar sind vermisst Symbol auf Ihrer Variablen. Ändern Sie es in $ iss - in der if-Bedingung. – benjamin
Angenommen, Ihre äußere Funktion funktioniert ordnungsgemäß, versuchen Sie, das Ergebnis des Shell-Aufrufs (iss) zu drucken, und überprüfen Sie, ob dies ordnungsgemäß funktioniert. EDIT: Ziemlich sicher, dass Sie das Dollar-Symbol vermissen, wie Benjamin bereits erwähnt. –
Vielleicht schlage ich Ihnen auch vor, die Option -s zu prüfen, ob die Datei leer ist oder nicht :) – grail