Bash-Skript zum Überprüfen der .AWK-Erweiterung

Bash-Skript zum Überprüfen der .AWK-Erweiterung
if [ ! $var  = " *.awk " ] ; then 
            echo "$var contains awk file"
            fi

das ist, was ich habe, aber wenn ich es ausführe und einen Dateinamen ohne eingebe, .awkheißt es immer noch, enthält eine Awk-Datei

Antwort1

In bashkönnen Sie einen Globbing-Test durchführen mit

if [[ $var == *.awk ]]; then
    echo '$var ends with ".awk"'
else
    echo '$var does not end with ".awk"'
fi

Beachten Sie die doppelten eckigen Klammern und Gleichheitszeichen.

bashunterstützt auch die Standardmethode zum Durchführen solcher Tests:

case $var in
    *.awk) echo '$var ends with ".awk"' ;;
    *)     echo '$var does not end with ".awk"' ;;
esac

Beachten Sie, dass das Muster in beiden Fällen *.awknicht in Anführungszeichen gesetzt werden kann. Das Setzen von Anführungszeichen würde einen Zeichenfolgenvergleich und keinen Mustervergleich per Globbing zur Folge haben.

Es gibt zwei Gründe dafür, dass Ihr Test scheinbar immer erfolgreich ist:

  1. Sie testen gegen die Literalzeichenfolge  *.awk (einschließlich eines Leerzeichens auf beiden Seiten), die vermutlich nie übereinstimmen wird, und
  2. Den Test negieren Sie mit !.

verwandte Informationen