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