Si la condición funciona por primera vez pero no por segunda vez

Si la condición funciona por primera vez pero no por segunda vez

He definido la siguiente condición para y si en una función. Por primera vez funciona bien. La segunda vez no se ejecuta después del bucle for, simplemente escribe la declaración de eco. ¿Por qué se comporta así?

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

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

Respuesta1

Para realizar una prueba en una cadena con un patrón global de archivos, use case:

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

Para hacer una prueba en una cadena contra una expresión regular en basho ksh93:

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

Tenga en cuenta el uso de [[ ... ]]y =~en lugar de [ ... ]y ==aquí.

La [ ... ]construcción generalmente no admite que el ==operador compare cadenas.

Con [[ ... ]]y ==, el lado derecho se toma como un patrón global de archivos. Entonces lo siguiente debería funcionar (en basho ksh93) también:

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

información relacionada