¿Cómo pueden las variables usar "~" para cd'ing?

13

¿Cómo puedo usar una variable $BASEen mi cd? Intenté lo siguiente pero recibí un error

$ cd ~/z/repo_1_ruby_193/
23:23:57 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ BASE="~/z"
23:24:03 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ cd $BASE/repo_1_ruby_193
-bash: cd: ~/z/repo_1_ruby_193: No such file or directory
23:24:25 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 
Michael Durrant
fuente

Respuestas:

25

En cd ~/z/está utilizando la expansión Tilde para expandirse ~en su directorio de inicio. En BASE="~/z", no lo es porque citó al ~personaje, por lo que no se expande. Es por eso que recibe un mensaje quejándose de un ~directorio inexistente . La solución es no citarlo, es decir BASE=~/z, para permitir que ocurra la expansión.

jw013
fuente
11

@ jw013 ha dado una explicación y solución válidas.

Pero puede haber algunos casos en los que desee citar las rutas, por ejemplo, cuando contengan múltiples espacios o símbolos especiales. En este caso, debe usar en $HOMElugar de ~, es decir, su BASE="~/z"se convertirá BASE="$HOME/z"y funcionará correctamente, porque la sustitución de parámetros se interpreta entre comillas dobles, a diferencia de la expansión de tilde.

Ruslan
fuente
55
Esa es una forma de hacerlo, pero no es necesario. BASE=~/"quoted name"funciona bien, siempre que ~se deje sin comillas.
hvd
44
@hvd: también debes dejar la barra sin comillas. BASE=~/"quoted name"funciona, pero BASE=~"/quoted name"no.
Gordon Davisson
Tienes razón. Buena atrapada.
hvd