在bash中,如何将N个参数作为空格分隔的字符串连接在一起

时间:2012-09-05 14:12:47

标签: string bash arguments

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

在Perl中它将是

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

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

function()
{
    ??
}

4 个答案:

答案 0 :(得分:29)

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

join () {
    echo "$*"
}

答案 1 :(得分:9)

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

func(){
    str=
    for i in "$@"; do 
        str="$str $i"
    done
    echo ${str# }
}

答案 2 :(得分:7)

这个行为类似于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

答案 3 :(得分:5)

与perreal的答案类似,但有一个子shell:

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