猿问

如何在Bash中连接数组的元素?

如何在Bash中连接数组的元素?

如果我在Bash中有这样的数组:

FOO=( a b c )

如何用逗号连接元素?例如,生产a,b,c.


德玛西亚99
浏览 498回答 3
3回答

一只名叫tom的猫

Pascal Pilz用100%纯Bash重写解决方案(没有外部命令):function join_by { local IFS="$1"; shift; echo "$*"; }例如,join_by , a "b c" d #a,b c,djoin_by / var local tmp #var/local/tmpjoin_by , "${FOO[@]}" #a,b,c或者,我们可以使用printf来支持多字符分隔符,使用@gniourf_gniourf的思想。function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }例如,join_by , a b c #a,b,cjoin_by ' , ' a b c #a , b , cjoin_by ')|(' a b c #a)|(b)|(cjoin_by ' %s ' a b c #a %s b %s cjoin_by $'\n' a b c #a<newline>b<newline>cjoin_by - a b c #a-b-cjoin_by '\' a b c #a\b\c

弑天下

另一个解决办法是:#!/bin/bashfoo=('foo bar' 'foo baz' 'bar baz')bar=$(printf ",%s" "${foo[@]}")bar=${bar:1}echo $bar编辑:相同,但对于多字符可变长度分隔符:#!/bin/bashseparator=")|(" # e.g. constructing regex, pray it does not contain %sfoo=('foo bar' 'foo baz' 'bar baz')regex="$( printf "${separator}%s" "${foo[@]}" )"regex="${regex:${#separator}}" # remove leading separatorecho "${regex}"# Prints: foo bar)|(foo baz)|(bar baz

沧海一幻觉

$&nbsp;foo=(a&nbsp;"b&nbsp;c"&nbsp;d)$&nbsp;bar=$(IFS=,&nbsp;;&nbsp;echo&nbsp;"${foo[*]}")$&nbsp;echo&nbsp;"$bar"a,b&nbsp;c,d
随时随地看视频慕课网APP
我要回答