15

我正在尝试编写一个函数,它接受n 个参数并将它们连接成一个字符串。

在 Perl 中它会是

my $string = join(' ', @ARGV);

但在bash中我不知道该怎么做

function()
{
    ??
}
4

4 回答 4

30

检查bash手册页的特殊参数下的“*”条目。

join () {
    echo "$*"
}
于 2012-09-05T14:17:33.660 回答
9

对于最直接的问题,chepner 的答案( "$*") 是最简单的,但作为如何依次访问每个参数的示例:

func(){
    str=
    for i in "$@"; do 
        str="$str $i"
    done
    echo ${str# }
}
于 2012-09-05T14:23:53.420 回答
9

这个行为类似于 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
于 2012-09-05T14:36:18.067 回答
6

类似于 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
于 2013-07-05T00:17:49.153 回答