Neustále vidím odpovědi citující tento odkaz s definitivním zněním „Neanalyzujte ls
!“ To mi vadí z několika důvodů:
-
Zdá se, že informace v tomto odkazu byly přijaty velkoobchodně s malými otázkami, i když při běžném čtení dokážu vybrat alespoň několik chyb.
-
Také se zdá, jako by problémy uvedené v tomto odkazu nevyvolaly žádnou touhu najít řešení.
Z prvního odstavce:
…když se zeptáte
[ls]
u seznamu
souborů je obrovský problém:Unix povoluje v
názvu souboru téměř jakýkoli znak, včetně mezer, nových řádků, čárek, symbolů svislých čar a
v podstatě čehokoli jiného, co byste chtěli někdy zkuste použít jako oddělovač kromě
NUL. …ls
odděluje názvy souborů novými řádky. To je v pořádku
dokud nemáte soubor s novým řádkem v názvu. A protože nevím
o žádné implementacils
který vám umožňuje ukončit
názvy souborů znaky NUL místo řádků, takže
nemůžeme bezpečně získat seznam názvů souborů pomocíls
.
Smůla, že? Jak kdy můžeme zpracovat datovou sadu ukončenou novým řádkem pro data, která mohou obsahovat nové řádky? No, pokud lidé, kteří odpovídají na otázky na tomto webu, nedělali takové věci denně, mohl bych si myslet, že jsme měli nějaké potíže.
Pravdou však je, že většina ls
implementace ve skutečnosti poskytují velmi jednoduché rozhraní API pro analýzu jejich výstupu a všichni jsme to celou dobu dělali, aniž bychom si to uvědomovali. Nejen, že můžete název souboru ukončit hodnotou null, můžete jej také začít hodnotou null nebo libovolným libovolným řetězcem, který si přejete. A co víc, můžete tyto libovolné řetězce přiřadit pro každý typ souboru . Zvažte prosím:
LS_COLORS='lc=
Linux