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 bash
o 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 bash
o ksh93
) también:
if [[ "$outputFile" == sampple*.pdf ]]; then
# as before
fi