【问题标题】:Assign output values in one variable using separators使用分隔符在一个变量中分配输出值
【发布时间】:2020-10-03 04:00:23
【问题描述】:
  RECORDS=$(aws route53 list-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID \
   | $JQ -r '.ResourceRecordSets[] | select (.Name == "ap.com.") | .Name')

$RECORDS 的输出值以如下分隔行显示的格式打印。

>> echo "recordType: $RECORDS"
recordType: ap.com.
ap1.com.
ap2.com.

如何以如下格式打印输出(以逗号分隔)

>> echo "recordType: $RECORDS"
recordType: "ap.com, ap1.com, ap2.com"

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    我会将 jq 输出读入一个数组,并使用 bash 自己的能力来连接事物:

    # redirect from a process substitution into mapfile 
    mapfile -t records < <(aws ...| jq ...)
    
    printf 'recordType: "%s"\n' "$(IFS=,; echo "${records[*]}")"
    

    只用逗号连接,而不是逗号+空格:

    recordType: "ap.com.,ap1.com.,ap2.com."
    

    改掉使用全大写变量名的习惯,将它们保留为 由外壳保留。有一天你会写PATH=something 然后 wonder why your script is broken.

    【讨论】:

    • 我想 +10 只是为了建议停止使用 ALLCAPS。我认为所有与 shell 相关的答案都应该包含该建议,直到这种做法被彻底清除
    • 是否有不使用 ALLCAPS 的“官方”建议来源?我们看到了很多使用它的例子,比如 ORACLE_HOME、JAVA_HOME 或 DOCKER_HOST,它们比前两个更新得多。
    • 我想我应该说“不要使用全部大写的 localscript 变量”。按照惯例,环境变量都是大写的。而且我不希望有官方消息来源:GNU bash 维护者不能告诉程序员不要犯错误。
    • 这更有意义。但是,如果我们查看 bash 源代码的 configure 脚本,我们可以看到大量 ALLCAPS 本地或脚本变量,例如 PACKAGE_NAME、PACKAGE_VERSION ......我们该如何解释呢?
    【解决方案2】:

    试试这条线:

    echo "recordType: $RECORDS"|sed -e "s/\.$/\", /"|sed -e "s/ap/\"ap/"|tr -d '\r\n'| rev | cut -c 3- | rev
    

    这可能不是最简短和最有效的,但它可以工作;)(并且可以轻松自定义)

    【讨论】:

      【解决方案3】:

      你可以使用:

      echo recordType:\"$RECORDS\"|sed 's/ /,/g'|sed 's/:/: /'
      

      其中第一个sed替换逗号,第二个冒号后加一个空格。

      【讨论】:

        【解决方案4】:

        你可以稍微改变你的 jq 命令:

        records=$(aws route53 list-resource-record-sets --hosted-zone-id $HOSTED_ZONE_ID \
           | $JQ -r '[.ResourceRecordSets[] | select (.Name == "ap.com.") | .Name]|join(", ")')
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多