Kuinka luoda for-silmukka komentoriville?

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 

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *