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