我在函數中定義了以下 for 和 if 條件。第一次運作良好。第二次在 for 迴圈之後不執行,它只是寫入 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
要根據or中的正規表示式對字串進行測試ksh93
:
if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
FromFile="$OutputFilePath"
transferFiles
fi
請注意這裡使用的是[[ ... ]]
and=~
而不是[ ... ]
and ==
。
此[ ... ]
構造通常不支援==
用於比較字串的運算子。
對於[[ ... ]]
和==
,右側被視為文件通配模式。因此,以下內容也應該有效(在bash
或中):ksh93
if [[ "$outputFile" == sampple*.pdf ]]; then
# as before
fi