almacenando un nombre de directorio con espacios en una variable bash

1

(Nota: después de un poco más de investigación, tengo una respuesta parcial, pero no me gusta tener que escribir los comandos reales contra esa variable de manera diferente según los espacios incrustados o no. Aceptaré mejores sugerencias) .

Me gusta almacenar varias variables de trabajo en bash cuando estoy trabajando en algo. Esto evita tener que escribirlo cada vez y también ayuda cuando vuelve a trabajar en él más tarde (pegue la tarea en un archivo localprofile.sh y source que más adelante ...) .

Me gustaría almacenar un nombre de directorio con espacios en él. Sé cómo lidiar con los espacios en los nombres de archivos / directorios de forma interactiva, usando comillas o escapes basados en \:

$ ls -1 /Users/myuser/Library/Application\ Support/ | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

o

$ ls -1 "/Users/myuser/Library/Application Support/" | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

Ahora me gustaría asignar ese directorio a una variable bash $ dn y eso no funciona tan bien.

Aquí hay algunos intentos diferentes. A propósito me mantuve alejado de la extensión de shell basada en ~.

dn='/Users/myuser/Library/Application Support/'
echo ''
echo ''
echo $dn
ls -1 $dn

dn='"/Users/myuser/Library/Application Support/"'
echo ''
echo ''
echo $dn
ls -1 $dn

dn=/Users/myuser/Library/Application\ Support/
echo ''
echo ''
echo $dn
ls -1 $dn

dn="/Users/myuser/Library/Application\ Support/"
echo ''
echo ''
echo $dn
ls -1 $dn

cada uno de estos muestra una variación en ls: /Users/myuser/Library/Application\: No such file or directory

    
pregunta JL Peyret 09.10.2017 - 21:19

1 respuesta

1

Bien, encontré esto ampliando con Google sin especificar mac u osx. Este es un problema de bash genérico: Stackoverflow cómo agregar ruta con espacio en la variable bash

Y, traduciendo eso a mi pregunta, ambos "enfoques interactivos", es decir, cotización o \ -escaping funcionan, siempre que envuelvas la variable bash en sus propias comillas dobles cuando ejecutas los comandos:

dn='/Users/myuser/Library/Application Support/'
ls -1 "$dn" | tail -5

dn=/Users/myuser/Library/Application\ Support/
ls -1 "$dn" | tail -5

No uses comillas simples arriba : en ese caso no hay sustitución de bash y obtienes ls: $dn: No such file or directory .

El inconveniente aquí es tener que ajustar las variables entre comillas dobles o no, dependiendo de los espacios incrustados.

dn="'/Users/myuser/Library/Application Support/'" y luego no tener comillas no funciona, por cierto.

    
respondido por el JL Peyret 09.10.2017 - 21:43

Lea otras preguntas en las etiquetas