/ / bash variabile per il limite superiore di sintassi del numero di loop [duplicato] - bash, variabili, for-loop

variabile bash per il limite superiore di sintassi del numero di loop [duplicato] - bash, variabili, for-loop

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 № 1

Non 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.