what sheet script es6 cheatsheet cheat bash variables spaces

sheet - Bash variables con espacios



vim cheat sheet (3)

Estoy enfrentando el siguiente problema en el shell MinGW en Windows. Tengo en mi /etc/profile la siguiente expresión:

export GIT_SSH="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe"

Esto no funciona cuando uso git fetch en el repositorio local. Pero si lo hago como (old dos way) esto funciona:

export GIT_SSH="/c/Progra~1/TortoiseGit/bin/TortoisePlink.exe"

Mi pregunta es:

¿Cómo puedo hacer que funcione usando espacios en la variable?

Para fines de prueba, puede simular algo como esto (cualquier ejemplo es bueno):

export VAR="/c/Program Files/TortoiseGit/bin/TortoisePlink.exe" # and try to execute like this $VAR

¿Hay una solución para esto (aparte de la mencionada anteriormente)?

Cualquier enlace / sugerencias son apreciadas.

Gracias,

Iulian


Ejecútelo así: "$VAR" . Este es uno de los errores más importantes en las secuencias de comandos de shell porque las cadenas siempre se sustituyen literalmente y los espacios contenidos se tratan como delimitadores simbólicos en lugar de como caracteres de la cadena. Piense en sustituir una variable como un tipo de código pegando en tiempo de ejecución.

Lo que realmente sucede cuando se escribe $VAR es que el shell intenta ejecutar el programa binario /c/Program con un primer argumento Files/TortoiseGit/bin/TortoisePlink.exe .

Aprendí esto de la manera difícil obteniendo un error de sintaxis extraño en un script de shell grande para una entrada en particular. No puedo pensar en ningún otro idioma que pueda quejarse por errores de sintaxis si la entrada en tiempo de ejecución contiene caracteres especiales, pero esa es la naturaleza de las secuencias de comandos shell, ya que los intérpretes de comandos como bash y sh interpretan el código línea por línea.

Siempre que espere que una cadena contenga espacios y no desea tratarla como tokens por separado, enciérrela entre comillas dobles.


Como referencia, resolví un problema similar en osx al encapsular el argumento con citas escapadas. Puede que esta no sea la mejor solución, pero parece funcionar.

alias sub="/"/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl/""


Lo he resuelto de la manera más simple:

exportar GIT_SSH = / c / Program / Files / TortoiseGit / bin / TortoisePlink.exe