Portál AbcLinuxu, 5. listopadu 2025 16:20
DMN=("aaa|dasdsaa|ddasddd"
"bbb|dasdsaa|ddasddd"
"ccc|dasdsaa|ddasddd")
for
echo ??? // výsledek aaa
echo ??? // výsledek dasdsaa
echo ??? // výsledek ddasddd
done
Pokud by to nebylo v poli, ale v souboru nebo jako výstup nějakého příkazu, bylo by to o dost jednodušší. Skutečně tam musí figurovat to pole?Tak nemusí tam figurovat pole, ale pokud to bude v souboru, tak jsem myslel, že to bude ještě složitější, navíc si to ani nedokážu moc představit jak to mysliš.
cut -d\| -f 1 <data.txtNebo druhý sloupeček výstupu z jiného programu:
program | cut -d\| -f 2Formátovaný výstup:
program | awk -F'|' '{printf "A: %s\nB: %s\nC: %s\n\n",$1,$2,$3}'
A: aaa B: dasdsaa C: ddasddd A: bbb B: dasdsaa C: ddasddd A: ccc B: dasdsaa C: ddasdddapod. Možností je mnoho, ale ve chvíli, kdy to někdo nacpe do pole, je jich o něco méně a jsou s tím občas problémy.
Navíc bych potřeboval s každou hodnotou nadále pracovat... A co tohle? Tohle by fungovat mělo, ne? Ale mám tam nějakou chybu na kterou nemůžu přijít.
DMN=("aaa|dasdsaa|ddasddd"
"bbb|dasdsaa|ddasddd"
"ccc|dasdsaa|ddasddd")
i=0
for i in ${!DMN[*]}
do
IFS="|"
ARRAY=${DMN[$i]}
echo ${ARRAY[0]}
echo ${ARRAY[1]}
echo ${ARRAY[2]}
done
ARRAY=${DMN[$i]}
má být
ARRAY=(${DMN[$i]})
Tady to je dvojím způsobem (druhý je spíš na zamyšlení „co to dělá“):
#!/bin/bash
DMN=("aaa|dasdsaa|ddasddd"
"bbb|dasdsaa|ddasddd"
"ccc|dasdsaa|ddasddd")
for (( i=0; i < ${#DMN[@]}; i++ )); do
echo "${DMN[$i]}"
done
OLDIFS=$IFS
IFS='|'
for (( i=0; i < ${#DMN[@]}; i++ )); do
var=(${DMN[$i]})
for (( j=0; j < ${#var[@]}; j++ )); do
echo "${var[$j]}"
done
done
IFS=$OLDIFS
for (( i=0; i < ${#DMN[@]}; i++ )); do
var=${DMN[$i]}
while [ 1 ]; do
varout=${var%%|*}
var=${var#*|}
echo "${varout}"
if [[ "$var" != *\|* ]]; then
echo "${var}"
break
fi
done
done
#!/bin/bash
a=(foo bar)
b=(bar foo)
c=(a b)
eval echo \${${c[0]}[0]} \${${c[1]}[0]}
eval je sice v mnoha jazycích, ale vždy je u ní uvedeno, že se jedná o funkci pomalou a potenciálně nebezpečnou. Je lépe se jejímu použití vyhnout a zpravidla to jde. Jen je nutné se na problém podívat z jiného úhlu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.