2013-08-05 95 views
2

我正試圖找到一種方法,以便在用於AWS CLI命令的bash陣列的元素之間沒有空格。該命令的過濾器表示過濾器的格式必須是'--filters name = string1,values = string1,string2'。刪除bash數組元素之間的空格

,我目前有至今代碼:這給我的

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

輸出

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, 

下一個濾鏡命令上班。我所搜索的所有內容都是刪除字符串中的空格,將字符串轉換爲數組,或者是一般數組上的文檔,而且我在任何地方都沒有看到類似的問題。

編輯:

我添加anubhava的print語句到我的代碼,這樣

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

所以我已經結束了做的是此基礎上anubhava的回答和評論

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

這就是echo與數組一起工作的方式。使用printf這樣的:

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

,你應該看到:

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

,用來獲取工作數組的輸出,但我需要數組本身的格式。 – user2642953

+0

數組只有單個元素。你是否注意到單個元素中的尾部空格?嘗試打印它:'echo「@ $ {resource_id [0]} @」'來驗證。 – anubhava