Работа с переменной array
, которая была определена следующим образом:
$ array='Name:"John" ID:"3234" Designation:"Engineer" Age:"32" Phone:"+123 456 789"'
ПРИМЕЧАНИЯ :
- при условии, что нет пробел между атрибутом ':' и значением
- при условии, что между парами атрибут / значение может существовать переменная величина пробела
- при условии, что все значения заключены в пару двойных кавычек
И при условии, что вы хотите проанализировать эту строку и сохранить ее в массиве с именем newmap
...
Мы можем использовать sed
, чтобы разбить нашу строку на отдельные строки как таковые:
$ sed 's/" /"\n/g;s/:/ /g' <<< ${array}
Name "John"
ID "3234"
Designation "Engineer"
Age "32"
Phone "+123 456 789"
Затем мы можем передать это в while
l oop, чтобы заполнить наш массив:
$ unset newmap
$ typeset -A newmap
$ while read -r k v
do
newmap[${k}]=${v//\"} # strip off the double quote wrapper
done < <(sed 's/" /"\n/g;s/:/ /g' <<< ${array})
$ typeset -p newmap
declare -A newmap=([ID]="3234" [Name]="John" [Phone]="+123 456 789" [Age]="32" [Designation]="Engineer" )
И применить предложенные (и слегка измененные) операторы echo
:
$ (
echo "Name - ${newmap[Name]}"
echo "ID - ${newmap[ID]}"
echo "Designation - ${newmap[Designation]}"
echo "Age - ${newmap[Age]}"
echo "Phone - ${newmap[Phone]}"
)
Name - John
ID - 3234
Designation - Engineer
Age - 32
Phone - +123 456 789