Scrivo il mio primo copione, quindi sono sicuro che questa sia una domanda di base, ma qualcuno può spiegarmi perché posso:
cd ~
cd bin
cd ~/bin
cd 'bin'
Ma non
cd '~'
cd '~/bin'
Ho bisogno di cd
in un percorso di directory con uno spazio in uno dei nomi di directory, quindi ho bisogno delle virgolette (è Windows Program Files
sotto il vino). Posso aggirarlo con due cd
comandi, ma perché non posso mettere ~
tra virgolette?
Se digito cd '~'
(o cd "~"
) Ottengo:
bash: cd: ~: No such file or directory
Risposta accettata:
Come ha notato @karel nella sua risposta, ~
è un carattere speciale e ampliato da Bash nella directory home dell'utente corrente. Consulta il manuale di Bash su "Tilde Expansion" o cerca il titolo "Tilde Expansion" nella pagina man (man bash
).
Qualsiasi tipo di citazione intorno al ~
impedisce questa espansione della tilde.
Per rispondere alla tua domanda su come puoi ancora usarlo per cd
in una directory con spazi nel nome, ci sono alcune alternative:
-
Ometti le virgolette ed evita gli spazi con barre inverse invece:
cd ~/foo/spaces are cool/bar
-
Cita il resto del percorso, ma omettilo intorno alla tilde e alla prima barra:
cd ~/"foo/spaces are cool/bar"
Come vedi, puoi concatenare stringhe tra virgolette e non in Bash semplicemente scrivendole una accanto all'altra senza spazi intermedi.
-
Usa la variabile d'ambiente
$HOME
invece della tilde, che viene comunque espansa tra "virgolette doppie" (ma non "virgolette singole"):cd "$HOME/foo/spaces are cool/bar"