パラメータ4..99を他の関数に渡す方法

パラメータ4..99を他の関数に渡す方法

関数を呼び出すために最大100個のパラメータを別の関数に渡したいと思います。私は最初の3つのパラメータを渡したくありません。他のプログラムの最初のパラメータとしてparam4で始まります。

現在最大19の追加パスを許可します。

$function_under_test "$4" "$5" "$6" "$7" "$8" "$9" "${10}" "${11}" "${12}" 
  "${13}" "${14}" "${15}" "${16}" "${17}" "${18}" "${19}"

ただし、これはより大きなパラメータセットではあまり信頼できません。

頑張った

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

しかし、私は理解しています

do_test.sh: line 8: ${@[a]}: bad substitution

完全なコードは次のとおりです。

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
}

シェルはbashです。

ベストアンサー1

"${@:4}"bashで私のために働きます。別の配列に割り当て、その配列にインデックスを割り当てることもできます。

foo=("$@")
second_function "${foo[@]:4}"

おすすめ記事