如何将Bash数组的元素连接为分隔符分隔的字符串

2023-11-06 15:43:39 浏览数 (1)

问:

如果我在 Bash 中有如下数组:

代码语言:javascript复制
FOO=( a b c )

如何用逗号连接元素?例如,生成字符串 a,b,c

答:

如果分隔符为单个字符

方法一:

代码语言:javascript复制
function join_by {
  local IFS="$1"; shift; echo "$*"; 
}

测试示例如下:

代码语言:javascript复制
join_by , a "b c" d #output: a,b c,d
join_by / var local tmp #output: var/local/tmp
FOO=( a b c )
join_by , "${FOO[@]}" #output: a,b,c

方法二:

代码语言:javascript复制
#!/bin/bash

foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}

echo $bar

测试结果如下:

如果分隔符为多个字符

可用如下代码:

代码语言:javascript复制
function join_by {
  local d=${1-} f=${2-}
  if shift 2; then
    printf %s "$f" "${@/#/$d}"
  fi
}

测试示例及结果如下:

参考:

  • stackoverflow question 1527049
  • https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion

0 人点赞