If-Koubou

Jaka jest różnica między pojedynczymi i podwójnymi notowaniami w powłoce Bash?

Jaka jest różnica między pojedynczymi i podwójnymi notowaniami w powłoce Bash? (Jak)

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.

Cytaty z prostym tekstem

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.

Zmienna zmienna Shell

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.

Przejrzyjmy

Teraz, gdy przejrzeliśmy przykłady, szybko sprawdzimy je na wypadek, gdybyś je przegapił:

Podwójne cytaty

  • Użyj, gdy chcesz dołączyć zmienne lub użyć rozszerzenia powłoki w ciągu znaków.
  • Wszystkie znaki w obrębie są interpretowane jako zwykłe znaki oprócz $ lub ", które zostaną rozwinięte w powłoce.

Pojedyncze cytaty

  • Wszystkie znaki w pojedynczym cudzysłowie są interpretowane jako ciąg znaków.

I tak kończy się lekcja cytatów. Używaj ich mądrze.