Guión interior extendido: ¿qué estoy haciendo mal?

Guión interior extendido: ¿qué estoy haciendo mal?

así que estoy intentando seleccionar una variedad de archivos usando un script interactivo.

El objetivo final es utilizar el readcomando, pero para demostración aquí asigné la globvariable manualmente

#!/bin/bash
shopt -s extglob
# read -rp "Please enter a globbing string:"$'\n' glob

# This will give me an error (See below)
glob=*2020_04_03_{06..18}.jpg
/bin/ls -la /mnt/drive1/images/*/*/${glob}

# While this will return the desired files
/bin/ls -la /mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg

El error es el siguiente:

Error /bin/ls: cannot access "/mnt/drive1/images/*/*/*2020_04_03_{06..18}.jpg": No such file or directory

Entonces, ¿qué me falta aquí al asignar la globvariable o al agregarla globa mi ruta?

Solución:

Encontré una solución pero no estoy muy seguro de por qué, pero

bash <<EOF
/bin/ls -la /mnt/drive1/images/*/*/${glob} 
EOF

me dará el resultado deseado.

Respuesta1

Puede utilizar una asignación de matriz en lugar de solo una variable.

shopt -s nullglob  ##: just in case there is non match for the glob.

glob=(*2020_04_03_{06..18}.jpg) ##: This will expand the glob * and brace expansion.

/bin/ls -la /mnt/drive1/images/*/*/"${glob[@]}"
  • Eso debería funcionar para su código de muestra.

  • El problema vendrá cuando decidas reemplazar los números dentro de la expansión de llaves con una variable mencionada por @kusalananda, sobre la secuencia de expansión.

  • Agregue la failglobopción Shell si desea ver un error y salga con un valor distinto de cero si no hay ningún patrón coincidente.

información relacionada