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.