En bash, sé que es posible escribir un for
bucle en el que alguna variable de control de bucle i
itera sobre enteros específicos. Por ejemplo, puedo escribir un script de shell bash que imprima los enteros entre 1 y 10:
#!/bin/bash
for i in {1..10}
do
echo $i
done
¿Es posible en cambio iterar sobre una variable de control de bucle que es una cadena, si proporciono una lista de cadenas? Por ejemplo, suponga que tengo una cadena fname
que representa un nombre de archivo. Quiero llamar a un conjunto de comandos para cada nombre de archivo. Por ejemplo, podría querer imprimir el contenido del fname
uso de un comando como este:
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
En otras palabras, en la primera iteración, fname
debe tener el valor fname="a.txt"
, mientras que en la segunda iteración, fname
debe tener el valor fname="b.txt"
, y así sucesivamente. Desafortunadamente, parece que la sintaxis anterior no es del todo correcta. Me gustaría obtener el resultado:
a.txt
b.txt
c.txt
pero cuando pruebo el código anterior, obtengo esta salida:
{a.txt,
b.txt,
c.txt}
¿Puede ayudarme a determinar la sintaxis correcta, para que pueda cambiar iterativamente el valor / contenido de la variable fname
? Gracias por tu tiempo.
{}
y el ,
s. La alternativa es eliminar los espacios. Así que, o "a.txt" "b.txt" "c.txt"
o {"a.txt","b.txt","c.txt"}
. Pero prefiero en su {a..c}.txt
lugar.
{}
, no necesita nada para recorrer una lista (delimitada por espacios)