Я определил следующие условия 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
или ksh93
:
if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
FromFile="$OutputFilePath"
transferFiles
fi
Обратите внимание на использование здесь [[ ... ]]
and =~
вместо [ ... ]
and ==
.
Конструкция [ ... ]
, как правило, не поддерживает ==
оператор сравнения строк.
С [[ ... ]]
и ==
правая часть берется как шаблон подстановки файла. Поэтому следующее должно работать (в bash
или ksh93
) также:
if [[ "$outputFile" == sampple*.pdf ]]; then
# as before
fi