関数に引数をそのまま正確に渡します。

関数に引数をそのまま正確に渡します。

私は次の機能を持っています:

bar() { echo $1:$2; }

私はこの関数を次から呼び出します。その他機能、foofoo呼び出し方法自体は次のとおりです。

foo "This is" a test

次の出力を取得したい。

This is:a

つまり、bar受信したパラメータは私が渡したタグと同じでなければなりませんfoo

fooこの目標を達成するにはどうすればよいですか?次の2つの実装を試しましたが、どちらも機能しませんでした。

  • foo() { bar $*; }

    - 出力:this:is

  • foo() { bar "$*"; }

    - 出力:this is a test:

私の質問は実際に引数への参照を維持する方法です。これは可能ですか?

ベストアンサー1

使用"$@":

$ bar() { echo "$1:$2"; }
$ foo() { bar "$@"; }
$ foo "This is" a test
This is:a

"$@"そして"$*"特別な意味があります:

  • "$@"単語拡張を実行せずに複数の単語に拡張します(例"$1" "$2" ...:)。
  • "$*"位置パラメーターをIFSの最初の文字に関連付けます(IFSが設定されていない場合はスペースを使用し、IFSが空の場合は連結しません)。

おすすめ記事