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