Если условие сработало в первый раз, но не во второй

Если условие сработало в первый раз, но не во второй

Я определил следующие условия 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

Связанный контент