[ -f "$myregexp" ]
ou [[ -f $myregexp ]]
testa se existe um arquivo chamado exatamente $myregexp
. (Observe que, com os colchetes únicos, você precisa das aspas duplas.)
Se você quiser testar a existência de arquivos correspondentes a um padrão glob, não há um caminho direto. Você precisa fazer isso em duas etapas: primeiro, gere a lista de correspondências e, em seguida, teste se essa lista está vazia.
a=( ~(Ni)*.@(tgz|tar.gz) )
if [[ ${#a} -ne 0 ]]; then …
Isso usa vários recursos específicos do ksh:
- o prefixo
~(N)
para gerar uma lista vazia se não houver correspondência; - o prefixo
~(i)
para fazer correspondência insensível a maiúsculas e minúsculas; - a sintaxe
@(foo|bar)
glob para corresponder afoo
oubar
Aqui está um equivalente do bash. No bash, você obtém expansão vazia de maiúsculas para globs não correspondentes e insensibilidade a maiúsculas e minúsculas das opções; extglob
é para a sintaxe @(foo|bar)
e outras extensões do ksh glob.
shopt -s nocaseglob nullglob extglob
a=( *.@(tgz|tar.gz) )
if [[ ${#a} -ne 0 ]]; then …
Aqui está um equivalente zsh. A opção extended_glob
é necessária para o prefixo (#i)
para uma correspondência sem distinção entre maiúsculas e minúsculas. O qualificador (N)
glob indica expansão vazia para globs não correspondentes.
setopt extended_glob
a=( (#i)*.(tgz|tar.gz)(N) )
if [[ ${#a} -ne 0 ]]; then …