web-dev-qa-db-ja.com

引数リストに引数を追加

次のBashコードがあります。

function suman {

    if test "$#" -eq "0"; then
        echo " [suman] using suman-Shell instead of suman executable.";
        suman-Shell "$@"
    else
        echo "we do something else here"
    fi

}


function suman-Shell {

    if [ -z "$LOCAL_SUMAN" ]; then
        local -a node_exec_args=( )
        handle_global_suman node_exec_args "$@"
    else
        NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" node "$LOCAL_SUMAN" --suman-Shell "$@";
    fi
}

sumanコマンドが引数なしでユーザーによって実行されると、これがヒットします。

  echo " [suman] using suman-Shell instead of suman executable.";
  suman-Shell "$@"

私の質問は-「$ @」値に引数を追加するにはどうすればよいですか?私は単に次のようなことをする必要があります:

handle_global_suman node_exec_args "--suman-Shell $@"

明らかにそれは間違っていますが、どうすればいいのかわかりません。私は何ですかnot探しています-

handle_global_suman node_exec_args "$@" --suman-Shell

問題はそれです handle_global_suman で動作します $1および$2と私が作った場合--suman-Shellから$3、それから私は他のコードを変更する必要があり、むしろそれを避けたいです。

予備回答:

    local args=("$@")
    args+=("--suman-Shell")

    if [ -z "$LOCAL_SUMAN" ]; then
        echo " => No local Suman executable could be found, given the present working directory => $PWD"
        echo " => Warning...attempting to run a globally installed version of Suman..."
        local -a node_exec_args=( )
        handle_global_suman node_exec_args "${args[@]}"
    else
        NODE_PATH="${NEW_NODE_PATH}" PATH="${NEW_PATH}" node "$LOCAL_SUMAN" "${args[@]}";
    fi
4
Alexander Mills

引数を配列に入れて、配列に追加します。

args=("$@")
args+=(foo)
args+=(bar)
baz "${args[@]}"
handle_global_suman node_exec_args --suman-Shell "$@"
1
Hauke Laging