関数のすべてのパラメータを連結する良い方法は何ですか?
今私が得ることは、それらを繰り返して連続して追加することです。
func(){
concat=
for arg in "$@"
do
concat=$concat$arg
done
echo $concat
}
私は似たようなことをしたい:
another_func() {
echo $(remove_spaces $@)
}
ベストアンサー1
concat () (
IFS=''
printf '%s\n' "$*"
)
この関数は、位置引数(引数)の値を区切り文字として最初の文字の値に関連付けられた単一の"$*"
文字列に展開する(二重引用符が重要です)を使用します。$IFS
これをIFS
空の文字列に設定します。つまり、"$*"
すべての引数が区切り文字なしで連結されることを意味します。
$IFS
また、( ... )
一般的な{ ... }
。
他の関数内でこの関数を呼び出すことは次のとおりです。
other_func () {
printf '%s\n' "$( concat "$@" )"
}
あるいは、実際に関数を呼び出さずに短くすることもできますconcat
。
other_func () {
( IFS=''; printf '%s\n' "$*" )
}
引数リストからすべてのスペースを削除するには、次のようにします。
printf '%s\n' "$*" | tr -d ' '
例えば、
concat_delete_sp () {
printf '%s\n' "$*" | tr -d ' '
}
テスト:
$ concat 1 2 3 "h h h" o o o
123h h hooo
$ concat_delete_sp 1 2 3 "h h h" o o o
123hhhooo