Píšu svůj první skript, takže jsem si jistý, že je to základní otázka, ale může mi někdo vysvětlit, proč to můžu:
cd ~
cd bin
cd ~/bin
cd 'bin'
Ale ne
cd '~'
cd '~/bin'
Potřebuji cd
na cestu k adresáři s mezerou v jednom z názvů adresářů, takže potřebuji uvozovky (je to Windows Program Files
pod vínem). Mohu to obejít pomocí dvou cd
příkazy, ale proč nemohu vložit ~
v uvozovkách?
Pokud napíšu cd '~'
(nebo cd "~"
) Dostávám:
bash: cd: ~: No such file or directory
Přijatá odpověď:
Jak poznamenal @karel ve své odpovědi, ~
je speciální znak a expandovaný Bash do domovského adresáře aktuálního uživatele. Viz Bashův manuál k „Tilde Expansion“ nebo vyhledejte nadpis „Tilde Expansion“ na stránce manuálu (man bash
).
Jakýkoli druh citace kolem ~
zabrání této expanzi vlnovky.
Chcete-li odpovědět na vaši otázku, jak jej stále můžete použít k cd
do adresáře s mezerami v názvu, existuje několik alternativ:
-
Vynechejte uvozovky a mezery uzavřete zpětnými lomítky:
cd ~/foo/spaces are cool/bar
-
Citujte zbytek cesty, ale vynechejte je kolem vlnovky a prvního lomítka:
cd ~/"foo/spaces are cool/bar"
Jak vidíte, v Bash můžete zřetězit řetězce v uvozovkách a neuvozených tak, že je jednoduše napíšete vedle sebe bez mezer mezi nimi.
-
Použijte proměnnou prostředí
$HOME
místo vlnovky, která se stále rozšiřuje uvnitř „dvojitých uvozovek“ (ale ne „jednoduchých uvozovek“):cd "$HOME/foo/spaces are cool/bar"