如果我在Bash中有一个这样的数组:
FOO=( a b c )
如何用逗号连接元素?例如,生成a b c。
如果我在Bash中有一个这样的数组:
FOO=( a b c )
如何用逗号连接元素?例如,生成a b c。
当前回答
我的尝试。
$ array=(one two "three four" five)
$ echo "${array[0]}$(printf " SEP %s" "${array[@]:1}")"
one SEP two SEP three four SEP five
其他回答
如果你想要连接的元素不是一个数组,而是一个空格分隔的字符串,你可以这样做:
foo="aa bb cc dd"
bar=`for i in $foo; do printf ",'%s'" $i; done`
bar=${bar:1}
echo $bar
'aa','bb','cc','dd'
例如,我的用例是,在我的shell脚本中传递一些字符串,我需要使用这个来运行SQL查询:
./my_script "aa bb cc dd"
在my_script中,我需要做“SELECT * FROM表WHERE name In ('aa','bb','cc','dd')。那么上面的命令将是有用的。
liststr=""
for item in list
do
liststr=$item,$liststr
done
LEN=`expr length $liststr`
LEN=`expr $LEN - 1`
liststr=${liststr:0:$LEN}
这也可以处理结尾多余的逗号。我不是bash专家。只是我的2c,因为这更基本,更容易理解
这个特别适用于busybox的sh和$@:
$ FOO=(a b c)
$ printf '%s\n' "${FOO[@]}" | paste -sd,
a,b,c
Or:
join_by() {
local d=$1
shift
printf '%s\n' "$@" | paste -sd "$d"
}
join_by , "${FOO[@]}" # a,b,c
我相信这是最短的解决方案,正如Benamin W.已经提到的:
(IFS=,; printf %s "${a[*]}")
想要添加,如果你使用zsh,你可以删除子shell:
IFS=, printf %s "${a[*]}"
测试:
a=(1 'a b' 3)
IFS=, printf %s "${a[*]}"
1,a b,3
awk -v sep=. 'BEGIN{ORS=OFS="";for(i=1;i<ARGC;i++){print ARGV[i],ARGC-i-1?sep:""}}' "${arr[@]}"
or
$ a=(1 "a b" 3)
$ b=$(IFS=, ; echo "${a[*]}")
$ echo $b
1,a b,3