Bash:获取第一个命令行参数并传递其余参数

时间:2012-05-13 03:49:52

标签: bash

示例:

check_prog hostname.com /bin/check_awesome -c 10 -w 13

check_remote -H $HOSTNAME -C "$ARGS"
#To be expanded as
check_remote -H hostname.com -C "/bin/check_awesome -c 10 -w 13"

我希望上面的内容是有道理的,论点会改变,因为我将使用它来处理大约20多个命令。它是一个包装程序的奇怪方法,但它可以解决我们在这里使用的一些系统的一些问题(得到70年代的代码)

以上内容可以用perl或python编写,但Bash是首选的方法

3 个答案:

答案 0 :(得分:79)

您可以使用shift

shift是一个内置的shell,它根据位置参数进行操作。每次调用shift时,它都会将所有位置参数“向下移动”一个。 $ 2变为$ 1,$ 3变为$ 2,$ 4变为$ 3,依此类推

示例:

$ function foo() { echo $@; shift; echo $@; } 
$ foo 1 2 3
1 2 3
2 3

答案 1 :(得分:2)

作为一名程序员,我强烈建议不要使用shift,因为修改状态的操作会影响脚本的大部分内容,并使之难以理解,修改和调试:sweat_smile:。您可以改为使用以下内容:

#!/usr/bin/env bash

all_args=("$@")
first_arg=$1
second_args=$2
rest_args=("${all_args[@]:2}")

echo "${rest_args[@]}"

答案 2 :(得分:1)

稍微调整 Abdullah's answer

your_command "$1" "${@:2}"

在 Bash(v3.2 和 v5.1)和 Zsh(v5.8)上测试