【问题标题】:how to print An array on the same line如何在同一行打印一个数组
【发布时间】:2021-10-11 08:27:51
【问题描述】:

我正在读取一个包含以下配置的文件:

$ cat ./FILENAME
*.one.dev.arr.name.com
*.one.dev.brr.name.com
*.one.dev.sic.name.com
*.one.dev.sid.name.com
*.one.dev.xyz.name.com
*.one.dev.yza.name.com

数组被读取 IFS='$\n' read -d '' -r -a FILENAME < ./FILENAME

我需要格式为以下格式:

'{*.one.dev.arr.name.com,*.one.dev.brr.name.com,*.one.dev.sic.name.com,*.one.dev.sid.name.com,*.one.dev.xyz.name.com,*.one.dev.yza.name.com}'

我尝试过使用 printf,棘手的部分是名称开头的通配符(*)。

【问题讨论】:

  • 需要一个数组吗?为什么要使用数组,只需stackoverflow.com/questions/2764051/…
  • 请使用您尝试过的printf 命令和所述命令生成的(错误)输出来更新问题
  • 我认为IFS/read 命令没有正确填充FILENAME[] 数组;运行typeset -p FILENAME查看数组的内容;考虑使用mapfile -t FILENAME < FILENAME 加载FILENAME[] 数组;可能还想重新考虑文件和/或数组的名称,因为两者都使用FILENAME 对于必须维护此脚本的其他人来说可能有点混乱

标签: bash jenkins-pipeline bash-completion


【解决方案1】:

只需输出你想要输出的内容 - {} 并与 , 连接行:

echo "{$(paste -sd, FILENAME)}"

如果你想要一个数组,你可以:

echo "{$(IFS=, ; echo "${array[*]}")}"

【讨论】:

  • 这对我不起作用。我得到 }*.one.dev.arr.name.com 的输出,只有一个
  • 您的文件有 dos 行结尾。删除它们。研究dos2unix.
猜你喜欢
  • 2016-02-16
  • 2017-02-20
  • 2021-06-01
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2018-03-20
相关资源
最近更新 更多