Hur man skapar en for loop på kommandoraden?

Låt oss ta en enkel for loop

#!/bin/bash for i in `seq 1 10`; do echo $i done 

AFAIK semikolon i bash-skript gör att shell kör nuvarande kommando synkront och sedan går till nästa. Att trycka på enter gör bokstavligen detsamma förutom att det inte tillåter dig att ange följande kommando och spola bufferten omedelbart.

Så varför shell inte kan tolka följande rad

for i in `seq 1 10`; do; echo $i; done 

hur fungerar det for loop fungerar?

Svar

Syntaxen för en for -slinga från bash manuell sida är

for name [ [ in [ word ... ] ] ; ] do list ; done 

Semikolonerna kan ersättas med vagnreturer, som noteras någon annanstans i bash manuell sida: ”En sekvens av en eller flera nya rader kan visas i en lista istället för ett semikolon för att avgränsa kommandon.”

Det omvända är dock inte sant, du kan inte godtyckligt ersätta nya rader med semikolon. Ditt flerspråkiga skript kan konverteras till en enda rad så länge du följer ovanstående syntaxregler och inte infogar ett extra semikolon efter do:

for i in `seq 1 10`; do echo $i; done 

Kommentarer

  • Det slutliga skriptet är fel, som @ dr01 påpekade, du måste ta bort semikolon efter do.
  • @jake, detta säger också att du måste ta bort semikolon efter do. Dessutom förklarar detta svar varför du måste ta bort semikolon efter `do '.
  • Vad händer om $i måste ingå i ett filnamn? Behöver det dubbla citat?
  • gör filename_${i} sedan
  • @ user4556274 enligt syntaxen " för jag gör; gjort " bör också fungera. varför inte ' t det?

Svar

Semikolon efter do är ett fel och borde inte vara där.

Följande fungerar korrekt:

for i in `seq 1 10`; do echo $i; done 

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *