Bash per loop con intervallo {# .. #}


17

{# .. #} genera una sequenza di numeri o caratteri, analogamente a range () in Python. Se eseguo il comando echo {1..5}nella riga di comando, ho:

1 2 3 4 5

Invece il seguente script bash non funziona come previsto.

for i in {1..3};
do
    echo "Iteration $i"
done

stamperà:

Iteration {1..3}

Perché?
* Potrei usare seqma ho letto che è obsoleto ( http://www.cyberciti.biz/faq/bash-for-loop/ )


Questo errore si verifica se lo script viene eseguito dal comando "sh" (provare a utilizzare "bash").
Agitare il

Risposte:


22

Ho provato il tuo codice (copia incolla in un terminale) e ha prodotto un risultato diverso da quello che hai pubblicato:

for i in {1..3};
do
    echo "Iteration $i"
done
#---OUTPUT BELOW---
Iteration 1
Iteration 2
Iteration 3

Sto usando Linux Mint 12 Lisa (derivato da Ubuntu) con la versione 4.2.10 (1) di bash


2
Hai ragione! Pensavo che sh e bash fossero la stessa cosa ..
Shake0

1
no, bash e sh sono abbastanza diversi ... bash è più capace di sh, è stato realizzato sulle spalle di sh :) anche se entrambi hanno un buon grado di compatibilità, hanno anche le loro differenze
zipizap

nota che puoi fare liste nidificate come per var in {{i..j}, {l..m}}; fai echo $ var; fatto se hai bisogno di una sequenza irregolare come 1 2 3 7 8 9
brown.2179

Si noti che su alcune distro sta /bin/sheffettivamente puntando a bash, su Debian e Ubuntu in genere punta a /bin/dashquale è per lo più conforme a POSIX ma non supporta la stessa sintassi di Bash.
dragon788,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.