2013-08-05 3 views
2

Я пытаюсь найти способ не иметь пробелов между элементами массива bash, которые я использую для команды AWS CLI. Фильтр для команды жалуется, что фильтр должен быть в формате '--filters name = string1, values ​​= string1, string2'.Удалить пробелы между элементами массива bash

Код, который я в настоящее время до сих пор:

tag_filter=($(aws ec2 describe-tags --filter "name=value,values=${tags[@]}" | jq '[.Tags[] | {ResourceId}]')) 
regex=[[:alpha:]][-][[:xdigit:]] 
for x in ${tag_filter[@]} 
do 
    if [[ $x =~ $regex ]] 
    then 
    #parameter expansion to remove " from elements 
    resource_id+=("${x//\"},") 
    #$resource_id== "${resource_id_array[@]// /,}" 
    else 
    throw error message 
    fi 
done 
echo "${resource_id[@]}" 

, который дает мне выход

foo-bar, herp-derp, bash-array, 

, но она должна быть

foo-bar,herp-derp,bash-array, 

для следующей команды фильтра работать. Все, что я искал, это удаление пробелов в строке, превращение строки в массив или документация на массивы вообще, и я не видел подобного вопроса в любом месте.

EDIT:

Я добавил оператор печати анубхава в в мой код таким образом, что

then 
    #parameter expansion to remove " from elements 
    resource_id_array+=("${x//\"},") 
    resource_id= $(printf "%s" "${resource_id_array[@]}") 
    resource_id= ${resource_id:1} 
    #${resource_id[@]}== "${resource_id[@]// /,}" 
else 

, которая теперь дает мне выводе, что мне нужно, но дайте мне «: команда не найдена ошибка», когда Я запускаю сценарий после того, как я эхо «$ resource_id»

ответ

0

Так что я в конечном итоге делает это основано на ответ анубхава и комментарии

tag_filter=($(aws ec2 describe-tags --filter "name=value,values=${tags[@]}" | jq '[.Tags[] | {ResourceId}]')) 
regex=[[:alpha:]][-][[:xdigit:]] 
for x in ${tag_filter[@]} 
do 
    if [[ $x =~ $regex ]] 
    then 
    #parameter expansion to remove " from elements 
    resource_id+=("${x//\"}") 
    else 
    throw error message 
    fi 
done 

resource_id=$(printf "%s" "${resource_id_array[@]}") 
echo "${resource_id[@]}" 
0

Так эхо работает с массивами. Используйте printf так:

printf "%s" "${resource_id[@]}" && echo "" 

и вы должны увидеть:

foo-bar,herp-derp,bash-array, 
+0

Это работает для получения вывод массива, но мне нужен сам массив, чтобы быть в этом формате. – user2642953

+0

Массив имеет только отдельные элементы. Вы также замечаете конечные пробелы в отдельных элементах? Попробуйте напечатать его так: 'echo '@ $ {resource_id [0]} @" 'для проверки. – anubhava