Нет законных оснований не использовать tr
или jq
для этого. В частности, вы не можете использовать read -d
, как показано ниже, но это так абсурдно с agile, что не стоит беспокоиться о переносимости. Это работает в bash:
$ string="[one,two,three,four,five]"
$ c=0; echo '['; while read -d , i; do
echo "{\"id\" : $((c++)), \"word\": \"${i%]}\"},"
done <<< "${string#[}",; echo ']';
[
{"id" : 0 , "word": "one"},
{"id" : 1 , "word": "two"},
{"id" : 2 , "word": "three"},
{"id" : 3 , "word": "four"},
{"id" : 4 , "word": "five"},
]
В настоящее время я не могу придумать чистого способа устранения запятой без tr
(хотя я полагаю, вы могли бы использовать довольно банальную if test "$c" -eq 5; then ....
, но это скучно) поэтому я просто предлагаю:
c=0; echo '['; while read -d , i; do
printf "{\"id\" : $((c++)), \"word\": \"${i%]}\"}";
expr $c = 5 | tr 10 ' ,'; done <<< "${string#[}",; echo ']'
Я еще раз повторю, что это нелепо от agile и имеет значение только как упражнение. Используйте jq
.