2 votos

almacenar un nombre de directorio con espacios en una variable bash

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

Me gusta almacenar varias variables de trabajo en bash mientras estoy trabajando en algo. Esto evita tener que escribirlo cada vez y también ayuda cuando vuelves a trabajar en ello algún tiempo después (mete la asignación en un localprofile.sh archivo y source que más tarde...).

Me gustaría almacenar un nombre de directorio con espacios. Sé cómo tratar los espacios en los nombres de archivos/directorios de forma interactiva, utilizando comillas o escapes basados en la letra:

$ 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 un bash $dn variable y eso no funciona muy bien.

He aquí 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 ellos muestra una variación de ls: /Users/myuser/Library/Application\: No such file or directory

1voto

JL Peyret Puntos 133

OK, encontré esto ampliando por google sin especificar mac u osx - esto es un problema genérico de bash: Stackoverflow como añadir ruta con espacio en variable bash

Y, traduciendo eso a mi pregunta, ambos "enfoques interactivos", es decir, el entrecomillado o el \N-escapado funcionan, siempre y cuando envuelva la variable bash en sus propias comillas dobles cuando ejecute 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 utilice las comillas simples por encima de - en ese caso no se produce ninguna sustitución de bash y se obtiene ls: $dn: No such file or directory .

El inconveniente aquí es tener que envolver las variables en comillas dobles o no dependiendo de los espacios incrustados.

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

0 votos

Como regla general: Siempre envolver los nombres de las variables en "" cuando los utilice si no está absolutamente seguro de que su valor no contiene espacios.

0 votos

No importa cómo se asigne el valor en primer lugar, todos los foo='foo bar' , foo="foo bar" , foo=foo\ bar asignar el mismo valor.

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