こんな感じですか?
arr=("a=>A" "b=>B")
for kv in "${arr[@]}"; do
k="${kv%=>*}"
v="${kv#*=>}"
echo "${k} => ${v}" #5
done
一応解説
- arrという配列変数に二つの文字列を代入しています。
- これは arr[0]="a=>A" と arr[1]="b=>B" を1行で行う書式です。
- 配列の値をループで回します。
- arr内の各値は変数 kv に入ります。
- 配列変数の値は通常は ${arr[0]} や ${arr[1]} でアクセスできますが、${arr[@]} は配列内の全ての値を半角スペース区切りで取得する書式?です。
- ${arr[@]} ではなく "${arr[@]}" としているのは値に空白が含まれている場合を想定しています。
- arr=(a "b c") の場合、${arr[@]} は a b c という3つの引数に展開されますが、"${arr[@]}" とすると a と "b c" という二つの引数に展開されます。
- 変数 kv に入っている "a=>A"という文字列から a の部分を取り出しています。
- ${kv%=>*} は変数kvの値の後方から =>* にマッチする部分を削除した値を返します。つまり変数 k には a が入ります。
- 変数 kv に入っている "a=>A"という文字列から A の部分を取り出しています。
- ${kv#*=>} は変数kvの値の前方から *=> にマッチする部分を削除した値を返します。つまり変数 k には A が入ります。
- 変数 k と v の値を出力しています。