【问题标题】:Bash building stringBash 构建字符串
【发布时间】:2016-11-17 20:29:29
【问题描述】:

我有以下代码:

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"

这显然不能正常工作。

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

非常感谢, 加布里埃尔

【问题讨论】:

  • 是什么让您认为 bash var 连接会保留引号和空格?你必须逃离他们。
  • 这符合预期。您正在打印一个字符串而不是一个数组。在 bash 中打印这样的数组也不容易。我会用转义字符打印它并用不同的语言进行拆分。
  • 将所有变量引用放在双引号中!例如,使用curl -s -u "$user:$pass" ...echo "result: $result"。我不知道这是否是特定问题的根源,但在您完成之前,不值得详细查看它。顺便说一句,shellcheck.net 对于像这样进行基本的完整性检查非常方便。
  • 要从当前输出转换到预期输出,您可以附加| sed "s/\,/\",\"/g"

标签: string bash concatenation


【解决方案1】:

我的问题与 ${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\""

感谢大家的关注并为我指明正确的方向。 加布里埃尔

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 2013-11-23
    • 2015-01-28
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多