매개변수 목록에 매개변수 추가

매개변수 목록에 매개변수 추가

다음 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 $@"

분명히 이것은 잘못된 것인데 어떻게 해야 할지 모르겠습니다. 난 무엇인가아니요찾다 -

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

답변1

매개변수를 배열에 넣고 배열에 추가합니다.

args=("$@")
args+=(foo)
args+=(bar)
baz "${args[@]}"

답변2

배열에 의존할 필요가 없습니다. 다음을 사용하여 매개변수를 직접 조작할 수 있습니다 set --.

$ manipulateArgs() {
  set -- 'my prefix' "$@" 'my suffix'
  for i in "$@"; do echo "$i"; done
}

$ manipulateArgs 'the middle'
my prefix
the middle
my suffix

답변3

handle_global_suman node_exec_args --suman-shell "$@"

관련 정보