将 n 个参数传递给 bash 脚本

pass n number of argument to bash script

我想将 2 个固定的和剩余的 'n' 个参数传递给我想存储在数组变量中的脚本。有人可以建议如何通过代码实现这一点。示例:

sh myScript.sh fixedArgument1 fixedArgument2 var1 var2 ... varN

N 可以是任何值,但不能超过 15。

此外,我可以通过 $1 和 fixedArgument2 $2 在脚本中获取 fixedArgument1 的值,但是如何将剩余的参数放入数组变量中。

只需移出固定位置参数并用 "$@" 获得余数。例如:

#!/bin/bash

echo first arg: ""
echo 2nd arg: ""
shift
shift
array=("$@")
for element in "${array[@]}"; do
    echo "$element"
done

确保您使用的 shell 支持数组。 sh 可能不会,因为 /bin/sh 通常不是 bash

但请注意,听起来您可能工作太辛苦了。为什么要把参数放在一个数组中呢?您可以通过 $@ 访问它们,就像您从数组中访问它们一样容易,这样做可能更有意义。该数组可能只是要混淆代码。例如:

#!/bin/sh

echo "first arg: ''"
echo "2nd arg: ''"
shift 2  # discard the first two arguments
if test $# -gt 0; then
    echo There are $# arguments remaining:
    i=1
    # Iterate over the remaining arguments
    for x; do echo "arg $((i++)): '$x'"; done
fi
#!/bin/bash

function main {
    local arg1= arg2= remaining=("${@:3}")
    ...
}

main "$@"

同样如前所述,您不需要将剩余的参数存储到数组中,您可以通过 "${@:3}" 直接访问它,或者在执行 [=13= 之后通过 "$@" 访问它].在 for 循环中,如果目标为 "$@" 且位置参数未在循环内通过 set -- 修改,则可以忽略 in ... 部分,因为这可能会或可能不会影响循环参数取决于实现。