将 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 ...
部分,因为这可能会或可能不会影响循环参数取决于实现。
我想将 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 ...
部分,因为这可能会或可能不会影响循环参数取决于实现。