Вы можете использовать read
с IFS
с двоеточием и запятой в качестве разделителей полей, например:
IFS=':,' read -ra arr <<< "a:1,b:2,c:3"
Это даст вам этот массив:
declare -p arr
declare -a arr=([0]="a" [1]="1" [2]="b" [3]="2" [4]="c" [5]="3")
если вы хотите перечислить пары ключ-значение, используйте:
for ((i=0; i<${#arr[@]}; i+=2)); do echo "${arr[i]} => ${arr[i+1]}"; done
a => 1
b => 2
c => 3
Чтобы получить одно значение для данного ключа, вы можете использовать это sed
:
k=a; sed -E "s/(^|.*,)$k:([^,]*).*/\2/" <<< "a:1,b:2,c:3"
1
k=b; sed -E "s/(^|.*,)$k:([^,]*).*/\2/" <<< "a:1,b:2,c:3"
2
k=c; sed -E "s/(^|.*,)$k:([^,]*).*/\2/" <<< "a:1,b:2,c:3"
3