Se a condição funcionar pela primeira vez, mas não pela segunda vez

Se a condição funcionar pela primeira vez, mas não pela segunda vez

Eu defini a condição for e if abaixo em uma função. Pela primeira vez funciona bem. Na segunda vez, ele não é executado após o loop for, apenas escreve a instrução echo. Por que ele se comporta assim?

for outputFile in $outputFiles
    do
            echo"Output file is $outputFile"

        if [ $outputFile == sampple*.pdf ]; then
            FromFile=$OutputFilePath
            transferFiles
         fi
done

Responder1

Para fazer um teste em uma string em um padrão de globbing de arquivo, use case:

case "$outputFile" in
    sampple*.pdf)
        FromFile="$OutputFilePath"
        transferFiles ;;
esac

Para fazer um teste em uma string em relação a uma expressão regular em bashor ksh93:

if [[ "$outputFile" =~ ^sampple.*\.pdf$ ]]; then
    FromFile="$OutputFilePath"
    transferFiles
fi

Observe o uso de [[ ... ]]e =~em vez de [ ... ]e ==aqui.

A [ ... ]construção geralmente não oferece suporte ao ==operador para comparação de strings.

Com [[ ... ]]e ==, o lado direito é considerado um padrão de globbing de arquivo. Portanto, o seguinte também deve funcionar (in bashou ):ksh93

if [[ "$outputFile" == sampple*.pdf ]]; then
   # as before
fi

informação relacionada