関数のすべての引数を他のコマンドに渡すには?

関数のすべての引数を他のコマンドに渡すには?

こんにちは、私はこれを持っています。~/.bash_profile

export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"

program(){
        $GOBIN/program $1
}

だから私はそれを行うことができますprogram "-p hello_world -tSu"。引用符を使用せずにカスタムフラグを使用してプログラムを実行する方法はありますか?これにより、対応するprogram -p hello_world -tSuフラグのみが使用され、-pスペースの後ろのすべてのエントリは無視されます。

ベストアンサー1

programシェル関数は、"$@"関数に提供されているすべてのコマンドライン引数のリストを参照するために使用されます。引用符を使用すると、与えられた各コマンドライン引数がprogram個別に引用されます(通常は必要に応じて)。

program () {
    "$GOBIN"/program "$@"
}

これにより、program次のように呼び出すことができます。

program -p hello_world -tSu

hello worldまたは代わりに合格したい場合はhello_world

program -p 'hello world' -tSu

ご存知のように、usingは$1最初のコマンドライン引数だけを参照します(そして$22番目のものも参照します)。値は$1さらにスペースに分割され、拡張が引用されていないため、各結果文字列はファイル名のグロービングを受けます。これにより、空白またはファイル名のグロービングパターンを含む引数が関数に誤って渡されます。

おすすめ記事