@PaulDraper Czytelny i mniej podatny na błędy> Krótszy o jedno naciśnięcie klawisza
Klamka
Pojedyncze cytaty są najlepszym rozwiązaniem. Nigdy nawet nie myślałem, że możesz użyć odwrotnego ukośnika w ten sposób ...
Floris
4
Zanim powłoka wyda findpolecenie, wykona różne rozszerzenia . Robiąc to, przetwarza również znaki specjalne (lub znaki o specjalnym znaczeniu), gdzie *jest symbolem wieloznacznym - globbing. Jest to tak zwane rozszerzenie nazwy pliku.
Załóżmy, że masz dwa pliki w swoim katalogu:
foo.pyc
bar.pyc
Następnie *.pycrozwinąłby się do obu nazw. Więc jeśli napiszesz:
find .-name *.pyc -delete
wtedy powłoka faktycznie wywoła:
find .-name foo.pyc bar.pyc -delete
co nie ma większego sensu, ponieważ możesz mieć tylko jeden argument -name. Dlatego musisz uciec od znaku specjalnego, aby zapobiec interpretacji go przez powłokę. Robisz to, uciekając przed ukośnikiem lub alternatywnie, cytując to.
find
powinna mieć sekcję wywoływanąNON-BUGS
z czymś podobnym jako przykład i wyjaśnienie, dlaczego jest potrzebna.Odpowiedzi:
Niecytowany glob zostałby rozszerzony przez powłokę przed
find
wykonaniem. (Patrz Rozszerzenie nazwy pliku w instrukcji.)Więc mówiąc:
faktycznie wykonałby:
zakładając, że w bieżącym katalogu były 3 pliki .pyc, co spowoduje błąd.
Odwrotny ukośnik powoduje, że powłoka przechodzi przez glob
find
, tzn. Działa tak, jakby*.pyc
była cytowana.Idealnie powinieneś cytować glob:
źródło
Zanim powłoka wyda
find
polecenie, wykona różne rozszerzenia . Robiąc to, przetwarza również znaki specjalne (lub znaki o specjalnym znaczeniu), gdzie*
jest symbolem wieloznacznym - globbing. Jest to tak zwane rozszerzenie nazwy pliku.Załóżmy, że masz dwa pliki w swoim katalogu:
foo.pyc
bar.pyc
Następnie
*.pyc
rozwinąłby się do obu nazw. Więc jeśli napiszesz:wtedy powłoka faktycznie wywoła:
co nie ma większego sensu, ponieważ możesz mieć tylko jeden argument
-name
. Dlatego musisz uciec od znaku specjalnego, aby zapobiec interpretacji go przez powłokę. Robisz to, uciekając przed ukośnikiem lub alternatywnie, cytując to.źródło