Jak vytvořit smyčku for v příkazovém řádku?

Pojďme jednoduše for loop

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

Středník AFAIK v bash skriptech způsobí, že shell provede aktuální příkaz synchronně a poté přejde k dalšímu. Stisknutím klávesy enter uděláte doslova totéž, kromě toho, že vám nedovolí zadat následující příkaz a okamžitě vyprázdní vyrovnávací paměť.

Proč tedy shell nemůže interpretovat následující řádek

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

jak to for loop vlastně dělá práce?

Odpověď

Syntaxe smyčky for z bash manuální stránka je

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

Středníky mohou být nahrazeny znaky konce řádku, jak je uvedeno jinde v manuální stránka: „V seznamu se místo středníku může zobrazit posloupnost jednoho nebo více nových řádků, které slouží k vymezení příkazů.“

Opak však není pravdivý; nemůžete libovolně nahrazovat nové řádky s středníky. Váš víceřádkový skript lze převést na jeden řádek, pokud dodržujete výše uvedená pravidla syntaxe a nevkládáte za středem do:

Komentáře

  • Konečný skript je špatný, jak zdůraznil @ dr01, po .
  • @jake, toto také říká, že musíte odstranit středník za do. Tato odpověď navíc vysvětluje proč musíte odstranit středník za `do '.
  • Co když $i Musí být součástí názvu souboru? Potřebuje uvozovky?
  • do filename_${i} potom
  • @ user4556274 podle syntaxe " pro i dělat; Hotovo " by také mělo fungovat. proč to nedělá '?

odpověď

středník after do je chyba a neměla by tam být.

Následující funguje správně:

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *