Główna » jak » 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?

    Umieszczanie 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 kwotowań, 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, którego z nich używasz, 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 cały 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 pomiędzy podwójnym i pojedynczym cudzysłowem 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 nie zobaczysz nic prócz "$ test" w wierszu poleceń, ale będzie on poprawnie wyświetlał się podczas używania 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, które wyglądają 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, aby utworzyć dowiązanie symboliczne 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 * w celu uruchomienia go dla wszystkich plików, należy 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, czy to przegapiłeś:

    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 z wyjątkiem $ 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.