我在函数中定义了以下 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