猛砸建筑串
问题描述:
我有以下代码:猛砸建筑串
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"
这显然,它不应该如此。
任何人都可以告诉我如何得到所需的结果吗?
非常感谢你, 加布里埃尔
答
我的问题是有关该${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\""
谢谢大家的目光并指向正确的方向。 Gabriel
是什么让你认为引号和空格会被bash var concatenation保存下来?你必须逃避它们。 –
这是预期的。您正在打印一个字符串而不是一个数组。在bash中打印这样的数组也是不容易的。我会用转义字符打印它,并用不同的语言进行拆分。 – spa900
将所有变量引用放在双引号中!例如,使用'curl -s -u“$ user:$ pass”...'和'echo“结果:$ result”'。我不知道这是否是特定问题的根源,但在完成之前,并不值得仔细查看。顺便说一下,[shellcheck.net](http://www.shellcheck.net)对于像这样进行基本的理智检查非常方便。 –