Domovská » jak » Jaký je rozdíl mezi jednotlivými a dvojitými uvozovkami v Bash Shell?

    Jaký je rozdíl mezi jednotlivými a dvojitými uvozovkami v Bash Shell?

    Uvíznutí textu v uvozovkách je poměrně běžnou praxí na příkazové řádce, zvláště pokud se jedná o soubory, které mají mezery v jménech, ale jak víte, zda použít jednoduché nebo dvojité uvozovky? Podívejme se na rozdíl, a když byste měli použít jeden proti druhému.

    Obecné pravidlo spočívá v tom, že dvojité uvozovky stále umožňují rozšiřování proměnných v uvozovkách a jednoduché uvozovky ne. Čti dál.

    Citáty s jednoduchým textem

    Pokud prostě uzavíráte pár slov textu, nezáleží na tom, který z nich používáte, protože oba budou fungovat přesně stejně. Například tyto dva příkazy vytvoří adresář s názvem Test Directory:

    mkdir "Test Directory"
    mkdir 'Test Directory'

    Zkušené typy pravděpodobně upozorní, že pokud chcete, můžete také použít mkdir Test \ Directory.

    Shell Variable Expansion

    Rozdíl mezi jednoduchými a dvojitými uvozovkami se stává důležitější, když se zabýváte proměnnými na příkazovém řádku - ve výchozím nastavení bude bash rozšiřovat proměnnou jako $ test na celý řetězec. Nejprve přidáme proměnnou:

    test = "Toto je test"

    Nyní můžete tuto proměnnou použít na příkazovém řádku, který by měl jednoduše vystupovat Tohle je zkouška do konzoly:

    echo $ test

    Zde je jasnější rozdíl mezi dvojitými a jednotlivými uvozovkami - při použití jednotlivých uvozovek se proměnné nebudou rozšiřovat. Například pokud spustíte tento příkaz:

    echo '$ test'

    Při použití jednoduchých uvozovek neuvidíte na příkazovém řádku nic než 'test', ale při použití dvojitých uvozovek se bude správně zobrazovat:

    Stejná věc funguje i při použití znaku pro rozbalení příkazu na příkazovém řádku. Řekněme například, že jste chtěli použít pwd příkaz z jiného příkazu - použijete závorky a řeknete shellu, aby ho rozbalil:

    echo 'pwd' / test

    Pokud jste byli ve své domovské složce, uvidíte výstup, který vypadá takto:

    / home / geek / test

    Řekněme například, že jste ve složce, která má místo v cestě a chcete použít příkaz ln pro vytvoření symbolického odkazu na soubor v aktuálním adresáři. Obvykle je třeba zadat celou cestu při použití příkazu ln, takže je mnohem jednodušší použít 'pwd' pro uložení psaní.

    Podívejte se, co se stane při pokusu o použití příkazu bez zahrnutí do uvozovek:

    ln -s 'pwd' / test / doména / geek / linkedname

    Místo toho je třeba obklopit v uvozovkách:

    ln -s "" pwd "/ název_souboru" / some / other / path

    Pro konkrétnější příklad předpokládejme, že máme strukturu složek, jako je tento příklad, kde všechny názvy souborů mají mezery v nich:

    Vzhledem k tomu, že příkaz unzip nepodporuje použití * k jeho spuštění proti všem souborům, je třeba místo toho použít příkaz pro. Zde se stávají zajímavé věci:

    pro f v * .zip; rozbalte $ f; hotovo

    Jejda! Vypadá to, že to nefunguje.

    Co budeme muset udělat, použijte dvojité uvozovky kolem proměnné $ f, například:

    pro f v * .zip; rozbalte "$ f"; hotovo

    Nyní pokaždé, když příkaz pro projde slučkou, bude ve skutečnosti spustit příkaz jako je tento:

    rozbalte "test 1.zip"

    Samozřejmě, že bude procházet a spustit podobný příkaz pro každý soubor v adresáři.

    Pojďme si to zopakovat

    Nyní, když jsme prošli příklady, budeme rychle prozkoumat v případě, že jste to vynechali:

    Dvojité uvozovky

    • Použijte, pokud chcete uzavřít proměnné nebo použít rozšíření shellu uvnitř řetězce.
    • Všechny znaky uvnitř jsou interpretovány jako běžné znaky s výjimkou $ nebo ', které budou na shellu rozšířeny.

    Jednoduché nabídky

    • Všechny znaky uvnitř jednotlivých uvozovek jsou interpretovány jako znakový řetězec.

    A tak končí lekci citací. Používejte je moudře.