In bash, so che è possibile scrivere un for
ciclo in cui una variabile di controllo del ciclo i
scorre su interi specificati. Ad esempio, posso scrivere uno script di shell bash che stampa gli interi tra 1 e 10:
#!/bin/bash
for i in {1..10}
do
echo $i
done
È possibile invece eseguire l'iterazione su una variabile di controllo del ciclo che è una stringa, se fornisco un elenco di stringhe? Ad esempio, supponiamo che io abbia una stringa fname
che rappresenta un nome di file. Voglio chiamare un set di comandi per ciascun nome di file. Ad esempio, potrei voler stampare il contenuto fname
dell'uso di un comando come questo:
#!/bin/bash
for fname in {"a.txt", "b.txt", "c.txt"}
do
echo $fname
done
In altre parole, nella prima iterazione, fname
dovrebbe avere il valore fname="a.txt"
, mentre nella seconda iterazione, fname
dovrebbe avere il valore fname="b.txt"
e così via. Sfortunatamente, sembra che la sintassi sopra non sia del tutto corretta. Vorrei ottenere l'output:
a.txt
b.txt
c.txt
ma quando provo il codice sopra, ottengo questo output:
{A.txt,
b.txt,
c.txt}
Potete per favore aiutarmi a determinare la sintassi corretta, in modo che io possa modificare in modo iterativo il valore / contenuto della variabile fname
? Grazie per il tuo tempo.
{}
e la ,
s. L'alternativa è rimuovere gli spazi. Quindi "a.txt" "b.txt" "c.txt"
o {"a.txt","b.txt","c.txt"}
. Ma preferisco {a..c}.txt
invece.
{}
, non hai bisogno di nulla per passare in rassegna un elenco (delimitato da spazi)