问:
如果我在 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