Załączanie tekstu w cudzysłowach jest dość standardową praktyką w linii poleceń, szczególnie w przypadku plików zawierających spacje w nazwach, ale skąd wiadomo, czy używać pojedynczych czy podwójnych cudzysłowów? Rzućmy okiem na różnicę i kiedy powinieneś użyć jednego z drugim.
Ogólna zasada mówi, że podwójne cudzysłowy wciąż umożliwiają ekspansję zmiennych w obrębie cudzysłowów, a pojedyncze cudzysłowy nie. Czytaj dalej.
Jeśli po prostu zamykasz kilka słów tekstu, to naprawdę nie ma znaczenia, z którego z nich korzystasz, ponieważ oba będą działać dokładnie tak samo. Na przykład te dwie komendy utworzą katalog o nazwie Katalog testowy:
mkdir "Katalog testowy"
mkdir "Katalog testowy"
Bardziej doświadczeni użytkownicy zapewne zauważą, że możesz również użyć katalogu testowego mkdir, jeśli chcesz.
Różnica między pojedynczym a podwójnym cudzysłowem staje się ważniejsza, gdy mamy do czynienia ze zmiennymi w linii poleceń - domyślnie bash rozszerzy zmienną taką jak $ test na pełny ciąg znaków. Najpierw przypiszemy zmienną:
test = "To jest test"
Teraz możesz użyć tej zmiennej w linii poleceń, tak jak ta, która powinna po prostu wyprowadzać To jest test do konsoli:
test echo $
Oto, gdzie różnica między podwójnymi i pojedynczymi cudzysłowami staje się bardziej wyraźna - kiedy używasz pojedynczych cudzysłowów, zmienne nie będą rozwijane. Na przykład, jeśli uruchomisz to polecenie:
echo "$ test"
Podczas korzystania z pojedynczych cudzysłowów zobaczysz tylko "$ test" w wierszu poleceń, ale będzie on poprawnie wyświetlał się, gdy użyjesz podwójnych cudzysłowów:
To samo działa, gdy używasz znaku, aby rozwinąć polecenie w linii poleceń. Na przykład, powiedz, że chciałeś użyć pwd polecenie z poziomu innego polecenia - użyjesz odsunięć, aby powiedzieć powłoce, aby ją rozwinąć:
echo "pwd" / test
Jeśli byłeś w folderze domowym, zobaczysz dane wyjściowe wyglądające tak:
/ home / geek / test
Powiedzmy na przykład, że znajdujesz się w folderze, który ma spację w ścieżce i chcesz użyć polecenia ln do utworzenia dowiązania symbolicznego do pliku w bieżącym katalogu. Zwykle musisz podać pełną ścieżkę przy użyciu polecenia ln, więc znacznie łatwiej jest użyć "pwd", aby zapisać wpisywanie.
Zobacz, co się stanie, gdy spróbujesz użyć komendy bez zamykania w cudzysłowach:
ln -s 'pwd' / test / home / geek / linkedname
Zamiast tego musisz otoczyć w cudzysłowach:
ln -s "" pwd "/ filename" / some / other / path
Aby uzyskać bardziej konkretny przykład, załóżmy, że mamy strukturę folderów podobną do tego przykładu, w której wszystkie nazwy plików zawierają spacje:
Ponieważ polecenie unzip nie obsługuje używania *, aby uruchomić go dla wszystkich plików, musisz zamiast tego użyć polecenia for. Oto, gdzie rzeczy stają się interesujące:
dla f w * .zip; wykonaj rozpakuj $ f; gotowe
Ups! Wygląda na to, że to nie zadziałało.
Zamiast tego będziemy musieli użyć podwójnych cudzysłowów wokół zmiennej $ f, jak poniżej:
dla f in * .zip; rozpakuj "$ f"; gotowe
Teraz za każdym razem, gdy polecenie for przechodzi przez pętlę, uruchomi komendę podobną do tej:
rozpakuj "test 1.zip"
Oczywiście przełączy się i uruchomi podobne polecenie dla każdego pliku w katalogu.
Teraz, gdy przejrzeliśmy przykłady, szybko sprawdzimy je na wypadek, gdybyś je przegapił:
Podwójne cytaty
Pojedyncze cytaty
I tak kończy się lekcja cytatów. Używaj ich mądrze.