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

2

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

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

        if [ $outputFile == sampple*.pdf ]; then
            FromFile=$OutputFilePath
            transferFiles
         fi
done
    
por user226759 13.04.2017 / 12:03

1 resposta

3

Para fazer um teste em uma string contra 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 contra uma expressão regular em bash ou 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 suporta o operador == para comparar strings.

Com [[ ... ]] e == , o lado direito é considerado como um padrão de agrupamento de arquivos. Então, o seguinte deve funcionar (em bash ou ksh93 ) também:

if [[ "$outputFile" == sampple*.pdf ]]; then
   # as before
fi
    
por 13.04.2017 / 12:09

Tags