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