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[@]}

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

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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.