W powłoce bash polecenie ls służy do listowania zawartości katalogu, a dopasowanie nazw plików odbywa się przez tzw. globbing (pathname expansion).
Wzorzec *abc*.txt spełnia wszystkie warunki z treści:
- * przed "abc" oznacza "dowolny ciąg znaków" (może być też pusty), więc pasują nazwy zaczynające się od "abc" i takie, które mają coś przed nim (np. test_abc…).
- * po "abc" oznacza "dowolny ciąg znaków" pomiędzy "abc" a końcówką, więc pasują też nazwy typu abc_file.txt albo my_abc_document.txt.
- .txt na końcu wymusza rozszerzenie txt.
Dlatego ls /home/user/*abc*.txt wyświetli wszystkie pliki w katalogu /home/user, których nazwa zawiera ciąg "abc" i kończy się na .txt.
Dlaczego pozostałe odpowiedzi są błędne:
- ?abc?.txt używa ?, które dopasowuje dokładnie jeden znak. To ogranicza nazwy do postaci: 1 znak + "abc" + 1 znak + ".txt", więc nie spełnia warunku "dowolnej długości nazwy".
- [abc].txt oznacza "jeden znak z zestawu a/b/c", więc pasuje tylko do a.txt, b.txt lub c.txt, a nie do nazw zawierających "abc".
- [a-c].txt również dopasowuje tylko jeden znak (a, b lub c) przed .txt, więc nadal nie realizuje wymagania.
Uwaga egzaminacyjna: gdyby pytanie wymagało przeszukiwania podkatalogów (rekurencyjnie), wtedy typowym narzędziem byłoby find. Tutaj jednak chodzi o dopasowanie nazw w jednym, wskazanym katalogu.