関数のすべてのパラメータ連結/変数のすべてのスペースを削除する

関数のすべてのパラメータ連結/変数のすべてのスペースを削除する

関数のすべてのパラメータを連結する良い方法は何ですか?

今私が得ることは、それらを繰り返して連続して追加することです。

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

おすすめ記事