Otetaan yksinkertainen for loop
#!/bin/bash for i in `seq 1 10`; do echo $i done
AFAIK-puolipiste bash-komentosarjoissa saa komentotulkin suorittamaan nykyisen komennon synkronisesti ja siirtymään seuraavaan komentoon. Enter-painikkeen painaminen tapahtuu kirjaimellisesti samalla tavalla, paitsi että se ei anna sinun syöttää seuraavaa komentoa ja huuhtele puskuri välittömästi.
Miksi kuori ei voi tulkita seuraavaa riviä
for i in `seq 1 10`; do; echo $i; done
miten tämä for loop
toimiiko?
Vastaus
for
-silmukan syntaksi bash
manuaalinen sivu on
for name [ [ in [ word ... ] ] ; ] do list ; done
Puolipisteet voidaan korvata rivinvaihdoilla, kuten muualla kohdassa bash
manuaalinen sivu: ”Yhden tai useamman uuden rivin jakso voi näkyä luettelossa puolipisteen sijaan komentojen rajoittamiseksi.”
Päinvastoin ei kuitenkaan ole totta; et voi korvaa mielivaltaisesti uudet rivit puolipisteillä. Monirivinen komentosarjasi voidaan muuntaa yhdeksi riviksi, kunhan noudatat yllä olevia syntaksisääntöjä ja älä lisää ylimääräistä puolipistettä do
:
kommentit
- Lopullinen komentosarja on väärä, kuten @ dr01 huomautti, sinun on poistettava puolipiste .
- @jake, tämä tarkoittaa myös, että sinun on poistettava puolipiste
do
-kohdan jälkeen. Lisäksi tässä vastauksessa selitetään miksi sinun on poistettava puolipiste `do ' jälkeen. - Entä jos
$i
täytyy olla osa tiedostonimeä? Tarvitseeko se lainausmerkkejä? - tee
filename_${i}
sitten - @ user4556274 syntaksin mukaisesti " minä teen; Valmis " pitäisi toimia myös. miksi ' ei sitä?
Vastaa
Puolipiste do
jälkeen on virhe, eikä sen pitäisi olla siellä.
Seuraava toimii oikein:
for i in `seq 1 10`; do echo $i; done