GNU/Linux >> Znalost Linux >  >> Ubuntu

Proč nemohu cd do citované tildy (‚~‘)?

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"
    

Ubuntu
  1. Proč nemůže bezkořenový Podman vytáhnout můj obrázek?

  2. Proč bylo „~“ vybráno k reprezentaci domovského adresáře?

  3. Proč nemohu použít CD ve skriptu Bash?

  1. Linux – Proč nemůže jádro spustit inicializaci?

  2. Nemůžete se připojit k bezdrátové síti 13.10?

  3. Nemůže Echo $catalina_home?

  1. Proč se Tilda (~) nerozšíří uvnitř dvojitých uvozovek?

  2. Proč neslyším slyšitelné pingy?

  3. Proč se nemohu dostat na svůj web a cPanel?