为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2019-08-02 07:02:59
如何在Bash中连接数组的元素?如果我在Bash中有这样的数组:FOO=( a b c )如何用逗号连接元素?例如,生产a,b,c.
查看完整描述

3 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

Pascal Pilz用100%纯Bash重写解决方案(没有外部命令):


function join_by { local IFS="$1"; shift; echo "$*"; }

例如,


join_by , a "b c" d #a,b c,d

join_by / var local tmp #var/local/tmp

join_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,c

join_by ' , ' a b c #a , b , c

join_by ')|(' a b c #a)|(b)|(c

join_by ' %s ' a b c #a %s b %s c

join_by $'\n' a b c #a<newline>b<newline>c

join_by - a b c #a-b-c

join_by '\' a b c #a\b\c




查看完整回答
反对 回复 2019-08-03
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

另一个解决办法是:


#!/bin/bash

foo=('foo bar' 'foo baz' 'bar baz')

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

bar=${bar:1}


echo $bar

编辑:相同,但对于多字符可变长度分隔符:


#!/bin/bash

separator=")|(" # e.g. constructing regex, pray it does not contain %s

foo=('foo bar' 'foo baz' 'bar baz')

regex="$( printf "${separator}%s" "${foo[@]}" )"

regex="${regex:${#separator}}" # remove leading separator

echo "${regex}"

# Prints: foo bar)|(foo baz)|(bar baz



查看完整回答
反对 回复 2019-08-03
?
精慕HU

TA贡献1845条经验 获得超8个赞


$ foo=(a "b c" d)$ bar=$(IFS=, ; echo "${foo[*]}")$ echo "$bar"a,b c,d


查看完整回答
反对 回复 2019-08-03
  • 3 回答
  • 0 关注
  • 955 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信