将Bash脚本的剩余`n-2`参数赋予调用的命令

时间:2017-04-23 17:08:07

标签: python linux bash

  

将剩余的n-2 Bash脚本参数提供给调用的命令

我有一个带有参数<program> <key> <number>...的Bash脚本,用户可以在其中提供任意数量的数字。

现在,如何调用提供数字的python脚本,例如python3 myscript <program> <number>...

我知道变量"$@",它代表所有参数,但在这种情况下,我不想提供<key>

是否有一些类似Python的语法可以让我这样做:python3 myscript "$1" "$@[2:]",或者我将如何处理这个问题?

3 个答案:

答案 0 :(得分:2)

你很亲密......

python3 myscript "$1" "${@:3}"

这将提供第一个参数,然后是参数3和随后的参数。

虽然@不是数组名称,而是表示当前上下文中的位置参数列表,但数组语法通常有效。元素提取就是其中的一个例子。当然,一个很大的区别是扩展所有位置参数的列表是使用"$@"完成的,而不是使用"${@[@]}",就像数组一样。

参数数量为$#。如果你想知道第二个以外有多少个参数,你可以使用$(( $# - 2))。如果参数少于3个,则此数字将为零或负数,因此如果它可能会影响您的脚本,请务必进行测试。

答案 1 :(得分:1)

您只需要确保您的Python脚本已准备好处理脚本的任意数量的参数。这样做的简单方法是使用this。请注意以下示例。

test.py

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 $@