Bash 加入列表

Bash to join a list

如何使用 shell 脚本和工具以正确的分隔符加入列表?

例如,给定,

$ seq 3 
1
2
3

seq 3 | list_join 将产生 1,2,3,没有尾随 ,

seq只是一个样本输入,实际输入可以来自任何地方 并且输入 content/format 不应该有任何假设,除了每个都以新行结尾。

更新:

我要求 "shell 脚本和工具" 所以我接受当前的 shell 脚本 解决方案,虽然我个人会使用Fravadona的解决方案:

$ jot -w 'Entry %c' 5 'A' | tee /dev/tty | paste -s -d ','
Entry A
Entry B
Entry C
Entry D
Entry E
Entry A,Entry B,Entry C,Entry D,Entry E

对于 single-character 分隔符,一个相当简单的方法是将项目收集到一个数组中,然后扩展数组并将 IFS 设置为分隔符。

例如,对于从标准输入读取行形式的输入,并将结果写入标准输出,你可以这样做:

list_join() {
  local IFS
  local -a items
  mapfile -t items
  IFS=,
  printf %s "${items[*]}"
}

演示:

$ seq 3 | list_join
1,2,3
$

相同的技术适用于从其他来源输入和输出到其他目的地,但细节 (mapfile / printf) 需要调整。要点是 IFS 和数组扩展 ("${items[*]}").