在bash中,如何将函数的参数连接到单个字符串中?
分隔符是固定的,不是空格(因此"$*"
不是我想要的)。这里以", "
为例。
join_args() {
# join args with sep ", ", then echo the joined string
# ... code here
}
join_args abc def ghi
# abc, def, ghi
答案 0 :(得分:2)
var dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
var selectedTime = dateFormatter.string(from: Date())
可以使用空格以外的其他字符,但是只能使用一个字符。因此
$*
输出join_args() {
local IFS=', '
echo "${*}"
}
。
如果需要更长的分隔符,则必须使用循环:
abc,def,ghi
或者,使用一种真实的编程语言:
join_args() {
while (($# > 1)) ; do
printf '%s, ' "$1"
shift
done
if (($#)) ; then
printf '%s\n' "$1"
fi
}
答案 1 :(得分:1)
您可以尝试:
$ function join_by { local IFS="$1"; shift; echo "$*"; }
然后使用:
$ join_by , abc def ghi
abc,def,ghi
如果您想在", "
后留多余的空间,请使用sed
我想:
$ join_by , abc def ghi | sed -e 's/,/, /g'
abc, def, ghi
或者您可以将printf
用于参数扩展,这样:
$ function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
$ arr=( abc def ghi "kl mn op" )
$ echo $(join_by ", " "${arr[@]}")
abc, def, ghi, kl mn op
答案 2 :(得分:0)
#!/usr/bin/env bash
join_args() {
count=$#
for i in `seq 1 $count`
do
if [[ $i = $count ]]
then
joined+=("$1")
else
joined+=("$1,")
shift
fi
done
echo ${joined[*]}
}
join_args abc def ghi sfl ugw pwg afm
输出:
abc, def, ghi, sfl, ugw, pwg, afm