関数内で以下の 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