Expansión de llaves con una variable Bash - {0..$foo}

Resuelto xref asked hace 12 años • 5 respuestas
WEEKS_TO_SAVE=4
mkdir -p weekly.{0..$WEEKS_TO_SAVE}

me da una carpeta llamada semanal.{0..4}

¿Existe algún secreto para la expansión de llaves al crear carpetas que me faltan?

xref avatar Feb 18 '12 07:02 xref
Aceptado

bashlo hace brace expansionantes variable expansion, por lo que obtienes weekly.{0..4}.
Debido a que el resultado es predecible y seguro ( no confíe en la entrada del usuario ), puede usar evalen su caso:

$ WEEKS_TO_SAVE=4
$ eval "mkdir -p weekly.{0..$((WEEKS_TO_SAVE))}"

nota :

  1. evales malvado
  2. utilizar evalcon cuidado

Aquí, $((..))se utiliza para forzar que la variable se evalúe como una expresión entera.

kev avatar Feb 18 '2012 04:02 kev

Las llaves no admiten variables en BASH, puedes hacer esto:

 for (( c=0; c<=WEEKS_TO_SAVE; c++ ))
 do
    mkdir -p weekly.${c}
 done
anubhava avatar Feb 18 '2012 01:02 anubhava

Otra forma de hacerlo sin eval y llamando a mkdir sólo una vez:

WEEKS_TO_SAVE=4
mkdir -p $(seq -f "weekly.%.0f" 0 $WEEKS_TO_SAVE)
jfg956 avatar Feb 18 '2012 11:02 jfg956

La expansión de llaves no lo admite. Tendrás que hacerlo mediante un bucle .

La expansión de llaves se realiza antes que cualquier otra expansión y los caracteres especiales de otras expansiones se conservan en el resultado. Es estrictamente textual. Bash no aplica ninguna interpretación sintáctica al contexto de la expansión o al texto entre llaves. Para evitar conflictos con la expansión de parámetros, la cadena '${' no se considera elegible para la expansión de llaves

.

amit_g avatar Feb 18 '2012 01:02 amit_g