In bash, so che è possibile scrivere un forciclo in cui una variabile di controllo del ciclo iscorre 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 fnameche rappresenta un nome di file. Voglio chiamare un set di comandi per ciascun nome di file. Ad esempio, potrei voler stampare il contenuto fnamedell'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, fnamedovrebbe avere il valore fname="a.txt", mentre nella seconda iterazione, fnamedovrebbe 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}.txtinvece.
{}, non hai bisogno di nulla per passare in rassegna un elenco (delimitato da spazi)