条件が1回目は機能するが2回目は機能しない場合

条件が1回目は機能するが2回目は機能しない場合

関数内で以下の for および if 条件を定義しました。 最初は正常に実行されます。 2 回目は for ループ後に実行されず、echo ステートメントが書き込まれるだけです。 なぜこのように動作するのでしょうか?

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

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

答え1

ファイル globbing パターンに対して文字列をテストするには、次を使用しますcase

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

bashまたは内の正規表現に対して文字列をテストするには、次のようにしますksh93

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

ここではandではなく[[ ... ]]andを使用していることに注意してください。=~[ ... ]==

この[ ... ]構造は一般に、==文字列を比較する演算子をサポートしていません。

および では[[ ... ]]==右側の部分はファイル globbing パターンとして扱われます。したがって、次も (または でbash)ksh93機能します。

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

関連情報