Não, os globs não são expandidos quando são citados, por isso:
set -- '*.txt'
[ -f "$1" ]
Verifica se o arquivo chamado *.txt
no diretório atual é um arquivo regular ou um link simbólico para um arquivo normal.
[ -f $1 ]
seria um problema ( $1
passaria por divisão de palavras (aqui não fazendo nada com o valor padrão de $IFS
) e geração de nome de arquivo).
Se você quisesse verificar se havia arquivos regulares com a extensão .txt
, você precisaria de um loop ou usar os qualificadores find
ou zsh
glob.
set -- *.txt
for f do
if [ -f "$f" ]; then
echo "there is at least one regular file with a .txt extension here"
fi
done
Ou se o padrão for encontrado em $1
:
IFS= # disable the globbing part of the split+glob operator
set -- $1
for f do... # as above
zsh
:
files=(*.txt(N-.))
echo "$#files regular files with a .txt extension here"
find
:
find -L . ! -name . -prune ! -name '.*' -name '*.txt' -type f | grep -q . &&
echo there are regular .txt files in here