Как подразумевает @chepner, код Java просто выводит текстовую строку, которую нужно проанализировать и манипулировать в bash, чтобы сделать ее полезной.Несомненно, есть несколько способов сделать это, вот тот, который использует чистый bash (то есть без внешних программ):
# This is the text string supplied by Java
MYMAP12='{one=one, two=two, three=three}'
# Create an associative array called 'map'
declare -A map
# Remove first and last characters ( { and } )
MYMAP12=${MYMAP12#?}
MYMAP12=${MYMAP12%?}
# Remove ,
MYMAP12=${MYMAP12//,/}
# The list is now delimited by spaces, the default in a shell
for item in $MYMAP12
do
# This splits around '='
IFS='=' read key val <<< $item
map[$key]=$val
done
echo "keys: ${!map[@]}"
echo "values: ${map[@]}"
Дает:
keys: two three one
values: two three one
РЕДАКТИРОВАТЬ:
Вы должны использовать правильный инструмент для работы, если вам нужен ассоциативный массив (карта, хэш-таблица, словарь), то вам нужен язык с этой функцией.К ним относятся bash
, ksh
, awk
, perl
, ruby
, python
и C++
.
Вы можете извлекать ключи и значения с помощью оболочки POSIX (sh
) но вы не можете сохранить их в ассоциативном массиве, поскольку sh
не имеет этой функции.Лучшее, что вы можете сделать - это общий список , который представляет собой просто текстовую строку значений, разделенных пробелами.Что вы можете сделать, это написать функцию поиска, которая эмулирует ее:
get_value() {
map="$1"
key="$2"
for pair in $MYMAP12
do
if [ "$key" = "${pair%=*}" ]
then
value="${pair#*=}"
# Remove last character ( , or } )
value=${value%?}
echo "$value"
return 0
fi
done
return 1
}
MYMAP12='{kone=one, ktwo=two, kthree=three}'
# Remove first character ( { )
MYMAP12=${MYMAP12#?}
val=$(get_value "$MYMAP12" "ktwo")
echo "value for 'ktwo' is $val"
Дает:
value for 'ktwo' is two
Используя эту функцию, вы также можете проверить наличие ключа, например:
if get_value "$MYMAP12" "kfour"
then
echo "key kfour exists"
else
echo "key kfour does not exist"
fi
Дает:
key kfour does not exist
Обратите внимание, что это неэффективно по сравнению с ассоциативным массивом, поскольку мы последовательно ищем список, хотя с коротким списком из трех выигранных вами ключейне вижу никакой разницы.