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í
$HOMEmí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"