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