0 votos

variable bash con espacios ¿por qué cd "$myvar" resulta en un parámetro, pero myvar='"algunas cosas"' en dos?

Me cuesta entender por qué lo siguiente no funciona como se espera en bash :

$ myvar='"some stuff"'
$ echo $myvar
"some stuff"
$ cd $myvar
bash: cd: "some: No such file or directory

Conozco el canonical manera es ( Cómo utilizar cd con una variable de shell que contenga espacios ):

$ myvar="some stuff"
$ echo $myvar
some stuff
$ cd "$myvar"

Pero, por ejemplo, aquí https://stackoverflow.com/a/12258418/881191 respuesta de Alex para MacOS aconseja escapar de las comillas, lo cual también probé y es lo mismo que poner comillas dobles dentro de las simples en mi caso. Por qué en un caso cd obtiene dos parámetros y en otros dos de como lo veo mismo "algunas cosas"?

1voto

Michael Zhou Puntos 167

Normalmente, las comillas se eliminan en la asignación de un parámetro/variable, a menos que las comillas en sí mismas estén entrecomilladas y entonces se conviertan en parte de la cadena. Como en su ejemplo "some stuff" es la cuerda unida a $myvar . Cuando se emite el comando

cd $myvar

el comando se divide en tokens: palabras y operadores. El intérprete de comandos los convierte en un comando y en argumentos, y luego la expansión de parámetros/variables tiene lugar en $myvar . Desde $myvar no se cita, el contenido se divide en dos palabras (lo que se conoce como división de campos o palabras) -

"some and stuff"

Así, el mensaje de error bash: cd: "some: No such file or directory . Desde cd sólo acepta un argumento stuff" no se tiene en cuenta. Incluso cuando se cita la variable $myvar sigue produciendo un mensaje de error porque el nombre del directorio es algunas cosas y no "algunas cosas"-.

cd "$myvar" 
bash: cd: "some stuff": No such file or directory

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X