Lidar com caracteres curinga que não correspondem a nenhum arquivo no bash

2

Estou tentando ler arquivos de um diretório em uma matriz, mas, mesmo quando o arquivo não existe, ele é salvo na matriz. Desejo excluir o nome do arquivo, se ele não existir.

a=(/tmp/nofileexists) && echo ${#a[@]} && echo ${a[@]}
1
/tmp/nofileexists

O caminho pode conter um curinga.

a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
    
por Afroz 15.07.2015 / 18:15

1 resposta

5

Você pode usar nullglob para bash return string vazia quando a expansão do nome do arquivo falhar:

$ shopt -s nullglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
0
<blank line>

Ou usando failglob para relatar erro:

$ shopt -s failglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
bash: no match: /tmp/nofileexists*.pdf
    
por 15.07.2015 / 18:25