это работает в bash
cert="first"
web="second"
declare -A assoc_array=(["cert"]="${cert}" ["web"]="${web}")
echo "first is" ${assoc_array[cert]}
echo "second is" ${assoc_array[web]}
ИЛИ
#loop
for i in "${assoc_array[@]}"
do
echo "$i"
done
Нет необходимости использовать eval afaik
Использование GNU sed
иsort
:
sed 's/^$/\x0/g' file | sort -z | tr '\0' '\n'
sort
использование нулевого символа в качестве разделителя(-z
)tr
. | sed '1{/^$/d};${/^$/d}'
Выход:
string2
x
z
y
f
string
string5
z
y
x
string
(возможно, кто-то может помочь заставить \x0
работать для не -GNU sed
, связанного вопроса)
Использование GNU awk
в режиме абзаца и сортировка значений массива в строковом режиме, а затем печать:
awk -v RS= '{ seen[NR]=$0 }
END { PROCINFO["sorted_in"]="@val_str_asc";
for (block in seen) {print sep seen[block]; sep=ORS}
}' infile