如何将参数 4..99 传递给另一个函数

Mic*_*ant 2 scripting bash parameter function

我正在调用一个函数,我想将最多 100 个参数传递给另一个函数。我不想传递前 3 个参数,我从 param4 作为另一个程序的第一个参数开始。

我目前允许传递多达 19 个额外的

$function_under_test "$4" "$5" "$6" "$7" "$8" "$9" "${10}" "${11}" "${12}" 
  "${13}" "${14}" "${15}" "${16}" "${17}" "${18}" "${19}"
Run Code Online (Sandbox Code Playgroud)

但这对于较大的参数集来说不是很可靠。

我试过

  declare -a pass_on_params
  for ((a=2; a<$#; a++)); do
    pass_on_params+=(${@[a]})  # line 8
  done
  echo "->" $pass_on_params
Run Code Online (Sandbox Code Playgroud)

但我明白了

do_test.sh: line 8: ${@[a]}: bad substitution
Run Code Online (Sandbox Code Playgroud)

完整代码为:

do_test () {
  function_under_test=$1
  line_number=$2
  expected="$3"
  param1="$4"
  declare -a pass_on_params
  for ((a=2; a<$#; a++)); do
    pass_on_params+=(${@[a]})
  done
  echo "ppppppppp" $pass_on_params
  $function_under_test "$4" "$5" "$6" "$7" "$8" "$9" "${10}" "${11}" "${12}" "${13}" "${14}" "${15}" "${16}" "${17}" "${18}" "${19}"
  if [ $result -eq $expected ]; then
    printf '.'
  else
    printf 'F'
    error_messages=$error_messages"Call to '$function_under_test $param1' failed: $result was not equal to $expected at line $line_number\n"
  fi
}
Run Code Online (Sandbox Code Playgroud)

外壳是bash

mur*_*uru 6

"${@:4}"在 bash 中为我工作。您还可以分配给另一个数组并对其进行索引:

foo=("$@")
second_function "${foo[@]:4}"
Run Code Online (Sandbox Code Playgroud)