Portál AbcLinuxu, 8. května 2025 00:34
#OLD_IFS="$IFS" #IFS=$"\n" for vlan in $(cat /etc/network/interfaces.d/mc0* | grep '#' | sed -r 's/^#\s+multicast\s(-\s)?(.+)\s+\(VLAN-([0-9]+)\)$/\3 "\2"/i'); do ar+=($vlan off) #ar+=($vlan) done #IFS="$OLD_IFS"dialog --checklist "Latest news " 20 50 30 "${ar[@]}" i když ve výpisu třeba dostanu trojici: 179 "nejaky popis vlan" off Tak v tom zobrazení se mi to stále rozbíjí a neumím přijít na to proč. Komentář na první řádku v každém mc0.* souboru vypadá nějak následovně:
# multicast XYZ (VLAN-171)Mým cílem je mít pod každou zatrhávací položkou seznamu jeden soubor/komentář/vlan, přičemž je mi jedno, jestli indexová čísla budou odpovídat číslu vlany nebo to bude 1..n a číslo vlany si pak dám případně do toho textového popisku (jen úprava té poslední části sedu). Podle toho, jak se mi to chovalo se mi i zdálo, že v tom stringu vadí mezery, tak jsem je zkoušel escapovat "\ ", ale ani to mi nepomohlo. S poli v bashi jsem zatím moc nedělal, tak si nejsem jistý, kde přesně je problém. Děkuji.
Řešení dotazu:
head -1 -q /etc/network/interfaces.d/mc0* | sed -r 's/^#\s+multicast\s(-\s)?(.+)\s+\(VLAN-([0-9]+)\)$/\3 "\2"/i'
# dejme tomu, že v těch datech nemůže být '|' while IFS='|' read -r tag item; do ar+=("$tag" "$item" off) done < <(... sed -r '.../\3|\2/i')
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.