
関数で次の for 条件と if 条件を定義しました。最初はうまくいきました。 forループが実行されていない後、2番目にechoステートメントのみを作成します。なぜこれですか?
for outputFile in $outputFiles
do
echo"Output file is $outputFile"
if [ $outputFile == sampple*.pdf ]; then
FromFile=$OutputFilePath
transferFiles
fi
done
答え1
ファイル一致パターンの文字列をテストするには、次のようにしますcase
。
case "$outputFile" in
sampple*.pdf)
FromFile="$OutputFilePath"
transferFiles ;;
esac
bash
または、正規表現の文字列をテストするには、次のようにしますksh93
。
if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
FromFile="$OutputFilePath"
transferFiles
fi
ここでは、および代わりにおよびが使用されることに[[ ... ]]
注意してください。=~
[ ... ]
==
この構文は通常、文字列比較演算子を[ ... ]
サポートしません。==
[[ ... ]]
との場合、==
右側はファイルグロービングパターンとして扱われます。したがって、次の項目も有効でなければなりません(bash
またはから)。ksh93
if [[ "$outputFile" == sampple*.pdf ]]; then
# as before
fi