我正在尝试编写一个函数,它接受n 个参数并将它们连接成一个字符串。
在 Perl 中它会是
my $string = join(' ', @ARGV);
但在bash中我不知道该怎么做
function()
{
??
}
检查bash
手册页的特殊参数下的“*”条目。
join () {
echo "$*"
}
对于最直接的问题,chepner 的答案( "$*"
) 是最简单的,但作为如何依次访问每个参数的示例:
func(){
str=
for i in "$@"; do
str="$str $i"
done
echo ${str# }
}
这个行为类似于 Perl join
:
#!/bin/bash
sticker() {
delim=$1 # join delimiter
shift
oldIFS=$IFS # save IFS, the field separator
IFS=$delim
result="$*"
IFS=$oldIFS # restore IFS
echo $result
}
sticker , a b c d efg
上述输出:
a,b,c,d,efg
类似于 perreal 的答案,但有一个子外壳:
function strjoin () (IFS=$1; shift; echo "$*");
strjoin : 1 '2 3' 4
1:2 3:4
Perl 的连接可以用多个字符分隔,并且可以足够快地从 bash 中使用(直接或使用别名或函数包装器)
perl -E 'say join(shift, @ARGV)' ', ' 1 '2 3' 4
1, 2 3, 4