Czytam wiele pytań i odpowiedzi takich jak ta i ta
Wiem, że symbole wieloznaczne są rozszerzane przez powłokę przed uruchomieniem polecenia i są one cechą powłoki. Również symbole wieloznaczne działają z tymi poleceniami, które mogą przyjmować wiele argumentów. W find . -name *.rb
jeśli mamy więcej niż jeden plik w katalogu bieżącym find
da nam błąd, ponieważ tu nie może przyjąć wiele argumentów i sposobów rozwiązania tego są:
find . -name "*.rb"
find . -name '*.rb'
find . -name \*.rb
Uciekamy z gwiazdki i zapobiegamy rozszerzaniu przez powłokę, ale symbole wieloznaczne są cechą powłoki; kiedy uciekamy, powłoka gwiazdki nie wie o jej znaczeniu i powinna znaleźć plik o nazwie *.rb
, więc w jaki sposób w tym przypadku rozszerzana jest gwiazdka?
*
jest cytowany, to powłoka go nie rozwija, a argument zawierający glob jest przekazywany do polecenia, które może zrozumieć glob - to samo dla wszystkich poleceń, które akceptują wyrażenie regularne, które zawsze powinno być cytowane ...find
[archive filename single argument] [list of files to extract]
”).