Bash建筑字符串

时间:2016-11-17 20:29:30

标签: string bash concatenation

我有以下代码:

streams=("CI" "UI" "QA")
role_text="streams:read:"
result=""

for s in "${streams[@]}"
do
   STREAMID=$(curl -s -u $user:$pass  -X GET -H "Content-Type: application/json" ${GRAYLOG2_URL}/streams | python /opt/script.py $s)
   curl -s -u $user:$pass -X POST -H "Content-Type: application/json" ${GRAYLOG2_URL}/streams/${STREAMID}/resume > /dev/null
   result=$result$role_text$STREAMID,
   echo "result: "$result
done

final_result=$(echo $result | sed '$s/.$//')
ROLES=$(curl -u $user:$pass -X GET -H "Content-Type: application/json" ${GRAYLOG2_URL}/roles 2>/dev/null)
echo "Final result: "$final_result
GRAYLOG2_ROLE='
{
  "name" : "'$role'",
  "description" : "'${role}' role",
  "permissions" : [ "'${final_result}'" ],
  "read_only" : false
}'

${final_result}应该是一个字符串,如:

"streams:read:582e0b99b9d3230d808cc0d0", "streams:read:582e0b99b9d3230d808cc0d4", "streams:read:582e0b98b9d3230d808cc0cb"

相反,我得到的结果是:

"streams:read:582e0b98b9d3230d808cc0cb,streams:read:582e0b99b9d3230d808cc0d0,streams:read:582e0b99b9d3230d808cc0d4"

显然,这不应该正常工作。

有谁能告诉我如何获得所需的结果?

非常感谢, 加布里埃尔

1 个答案:

答案 0 :(得分:0)

我的问题与${final_result}应该被创建为一个字符串数组这样的事实有关:

"streams:read:582e0b99b9d3230d808cc0d0", "streams:read:582e0b99b9d3230d808cc0d4", "streams:read:582e0b98b9d3230d808cc0cb"

但相反,我会得到一个大字符串,如:

"streams:read:582e0b98b9d3230d808cc0cb,streams:read:582e0b99b9d3230d808cc0d0,streams:read:582e0b99b9d3230d808cc0d4"

我得到了同事的帮助并解决了这个问题:

 result="$result\"$role_text$STREAMID\""

谢谢大家的关注,并指出了正确的方向。 加布里埃尔