Obsługa symboli wieloznacznych nie pasujących do pliku w bash

2

Próbuję odczytać pliki z katalogu do tablicy, ale nawet jeśli plik nie istnieje, jest on zapisywany w tablicy. Chcę wykluczyć nazwę pliku, jeśli nie istnieje.

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

Ścieżka może zawierać dziką kartę.

a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
Afroz
źródło

Odpowiedzi:

5

Możesz użyć nullglobdo bashzwrócenia pustego ciągu, gdy rozszerzenie nazwy pliku nie powiedzie się:

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

Lub używając failglobdo zgłoszenia błędu:

$ shopt -s failglob
$ a=(/tmp/nofileexists*.pdf) && echo ${#a[@]} && echo ${a[@]}
bash: no match: /tmp/nofileexists*.pdf
Cuonglm
źródło
przepraszam, jeśli pytanie nie jest jasne. Chcę nazwy plików w tablicy, a nie w treści. Podałem prosty przykład pojedynczego pliku, ale może on zawierać symbole wieloznaczne. a = (/ tmp / nofileexists * .pdf)
Afroz
@Afr: Czy teraz jest lepiej?
cuonglm,