Skip to content

Maak lijst-iterators met het Linux ‘foreach’-commando

16 de augustus de 2021
gentoo penguin cuverville island antarctica 453588343 5b49b2ab46e0fb005b7288b6

De foreach commando implementeert een lus waarbij de lusvariabelen de waarden van een of meer lijsten aannemen.

Korte inhoud

Het commando heeft een van de twee volgende vormen: foreach varname lijst body
foreach varlist1 lijst1 ?varlist2 lijst2 …? lichaam

In het eenvoudigste geval is er één lusvariabele, varnaam, en een lijst, lijst, die waarden identificeert om aan toe te wijzen varnaam. De lichaam argument is een Tcl-script. Voor elk element van lijst (in volgorde van eerste naar laatste), foreach wijst de inhoud van het element toe aan varnaam alsof de lindex commando is gebruikt om het element te extraheren, roept vervolgens de Tcl-interpreter aan om uit te voeren lichaam.

Gebruiksopmerkingen

In het algemeen kan er meer dan één lijst met waarden zijn (bijv. lijst1 en lijst2), en elke lijst met waarden kan worden gekoppeld aan een lijst met lusvariabelen (bijv. varlist1 en varlist2). Tijdens elke iteratie van de lus, de variabelen van elk varlist krijgen opeenvolgende waarden toegewezen uit de corresponderende lijst. Waarden in elk lijst worden gebruikt in volgorde van de eerste naar de laatste, en elke waarde wordt precies één keer gebruikt. Het totale aantal lusiteraties is groot genoeg om alle waarden uit alle waardelijsten te gebruiken. Als een waardenlijst niet genoeg elementen bevat voor elk van zijn lusvariabelen in elke iteratie, worden lege waarden gebruikt voor de ontbrekende elementen. De pauze en doorgaan met verklaringen kunnen binnen worden ingeroepen lichaam, met hetzelfde effect als in de voor opdracht. De foreach geeft een lege string terug.

Voorbeelden

De volgende lus gebruikt I en J als lusvariabelen om paren elementen van een enkele lijst te herhalen. stel x {}
foreach {ij} {abcdef} {
lappend x $j $i
}
# De waarde van x is “badcfe”
# Er zijn 3 iteraties van de lus.

De volgende lus gebruikt I en J om twee lijsten parallel te herhalen. stel x {}
foreach i {abc} j {defg} {
lappend x $i $j
}
# De waarde van x is “adbecf {} g”
# Er zijn 4 iteraties van de lus.

De twee vormen worden gecombineerd in het volgende voorbeeld. stel x {}
voor elk ik {abc} {jk} {defg} {
lappend x $i $j $k
}
# De waarde van x is “adebfgc {} {}”
# Er zijn 3 iteraties van de lus.

Verschillende gerelateerde commando’s werken met: foreach inclusief voor, terwijl, pauze, en doorgaan met.