【问题标题】:How to append extracted multiple values with comma to new variable?如何用逗号将提取的多个值附加到新变量?
【发布时间】:2021-12-30 13:51:15
【问题描述】:
#!/bin/bash

HOSTS="dev.com,dev-secret;qa.com,qa-secret"
HOSTNAME=""
SECRET=""


  IFS=';' read -ra host <<<"$HOSTS"
  for i in "${host[@]}"; do
    IFS=',' read -r name secret <<<$i
    HOSTNAME+= ${name}
    SECRET+= ${secret}
  done

现在我希望输出为:

echo $HOSTNAME should output : "dev.com\,qa.com" 
echo $SECRET should output : "dev-secret\,qa-secret" 

如何在字符串中加入或附加 for 循环输出?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    您的问题是+= 后面的空格。使用参数扩展,您只能在填充参数时添加\,

    HOSTS="dev.com,dev-secret;qa.com,qa-secret"
    HOSTNAME=""
    SECRET=""
    
    IFS=';' read -ra host <<<"$HOSTS"
    for i in "${host[@]}"; do
      IFS=',' read -r name secret <<<$i
      HOSTNAME+="${HOSTNAME:+\,}${name}"
      SECRET+="${SECRET:+\,}${secret}"
    done
    
    echo "${HOSTNAME}"
    echo "${SECRET}"
    

    【讨论】:

      【解决方案2】:

      不循环,但读取数组并执行数组连接:

      #!/usr/bin/env bash
      
      hosts="dev.com,dev-secret;qa.com,qa-secret"
      hostnames=()
      secrets=()
      
      join () {
        printf %s "$1"
        shift
        printf %s "${@/#/\\,}"
      }
      
      {
        IFS=',' read -r -d';' -a hostnames
        IFS=',' read -r -a secrets
      } <<<"$hosts"
      
      printf 'Hostnames: "%s"\n' "$(join "${hostnames[@]}")"
      printf 'Secrets: "%s"\n'  "$(join "${secrets[@]}")"
      

      输出:

      Hostnames: "dev.com\,dev-secret"
      Secrets: "qa.com\,qa-secret"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多