将剩余的
n-2
Bash脚本参数提供给调用的命令
我有一个带有参数<program> <key> <number>...
的Bash脚本,用户可以在其中提供任意数量的数字。
现在,如何调用提供数字的python脚本,例如python3 myscript <program> <number>...
?
我知道变量"$@"
,它代表所有参数,但在这种情况下,我不想提供<key>
。
是否有一些类似Python的语法可以让我这样做:python3 myscript "$1" "$@[2:]"
,或者我将如何处理这个问题?
答案 0 :(得分:2)
你很亲密......
python3 myscript "$1" "${@:3}"
这将提供第一个参数,然后是参数3和随后的参数。
虽然@
不是数组名称,而是表示当前上下文中的位置参数列表,但数组语法通常有效。元素提取就是其中的一个例子。当然,一个很大的区别是扩展所有位置参数的列表是使用"$@"
完成的,而不是使用"${@[@]}"
,就像数组一样。
参数数量为$#
。如果你想知道第二个以外有多少个参数,你可以使用$(( $# - 2))
。如果参数少于3个,则此数字将为零或负数,因此如果它可能会影响您的脚本,请务必进行测试。
答案 1 :(得分:1)
您只需要确保您的Python脚本已准备好处理脚本的任意数量的参数。这样做的简单方法是使用this。请注意以下示例。
import sys
def foo(*args):
print(*args)
if __name__ == '__main__':
foo(sys.argv[1:])
来自你的shell的▶ python test.py 1 2 3 4 5
['1', '2', '3', '4', '5']
▶ python test.py 1 2 3
['1', '2', '3']
答案 2 :(得分:1)
从bash脚本中可以使用shift命令两次,此时$ @将包含您寻找的值。
#!/bin/bash
shift
shift
echo $@