Se creo un ciclo di bash come questo, usando i numeri letterali, tutto funziona come previsto:
#!/bin/bash
for i in {1..10}; do
echo $i
done
L'output è:
1
2
3
4
5
6
7
8
9
10
Ma se voglio usare il limite superiore in una variabile, non riesco a farlo correttamente. Ecco i miei quattro tentativi:
#!/bin/bash
n=10
for i in {1..$n}; do
echo $i
done
for i in {1.."$n"}; do
echo $i
done
for i in {1..${n}}; do
echo $i
done
for i in {1.."${n}"}; do
echo $i
done
E l'output è ora:
{1..10}
{1..10}
{1..10}
{1..10}
Non quello che volevo ... :(
Per essere chiari sulla domanda:
Come si usa una variabile come limite per la sintassi di intervallo in un ciclo per loop?
risposte:
2 per risposta № 1Non usare {...}
; usa uno stile C per il ciclo.
for ((i=1; i <= $n; i++)); do
L'espansione della controvra si verifica prima dell'espansione dei parametri, quindi non è possibile generare una sequenza di lunghezza variabile senza l'uso eval
. Questo è anche più efficiente, poiché non è necessario generare una lista di indici possibilmente ampia prima dell'inizio del ciclo.