Wenn die Bedingung beim ersten Mal funktioniert, beim zweiten Mal jedoch nicht

Wenn die Bedingung beim ersten Mal funktioniert, beim zweiten Mal jedoch nicht

Ich habe die folgende For- und If-Bedingung in einer Funktion definiert. Beim ersten Mal läuft sie gut. Beim zweiten Mal wird sie nach der For-Schleife nicht ausgeführt, sondern schreibt nur die Echo-Anweisung. Warum verhält sie sich so?

for outputFile in $outputFiles
    do
            echo"Output file is $outputFile"

        if [ $outputFile == sampple*.pdf ]; then
            FromFile=$OutputFilePath
            transferFiles
         fi
done

Antwort1

Um einen String anhand eines Datei-Globbing-Musters zu testen, verwenden Sie case:

case "$outputFile" in
    sampple*.pdf)
        FromFile="$OutputFilePath"
        transferFiles ;;
esac

So führen Sie einen Test einer Zeichenfolge anhand eines regulären Ausdrucks in bashoder durch ksh93:

if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
    FromFile="$OutputFilePath"
    transferFiles
fi

Beachten Sie hier die Verwendung von [[ ... ]]„und“ =~anstelle von [ ... ]„und“ ==.

Die [ ... ]Konstruktion unterstützt den ==Operator zum Vergleichen von Zeichenketten grundsätzlich nicht.

Mit [[ ... ]]und ==wird die rechte Seite als Datei-Globbing-Muster verwendet. Daher sollte Folgendes (in bashoder ksh93) auch funktionieren:

if [[ "$outputFile" == sampple*.pdf ]]; then
   # as before
fi

verwandte Informationen