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 に答える