96

例子:

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 将是首选方法。

4

3 回答 3

126

您可以使用移位

shift 是一个对位置参数进行操作的内置 shell。每次调用 shift 时,它都会将所有位置参数“移动”一个。2 美元变成 1 美元,3 美元变成 2 美元,4 美元变成 3 美元,以此类推

例子:

$ function foo() { echo $@; shift; echo $@; } 
$ foo 1 2 3
1 2 3
2 3
于 2012-05-13T04:05:49.350 回答
30

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

#!/usr/bin/env bash

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

echo "${rest_args[@]}"
于 2019-12-01T15:09:10.527 回答
9

稍微调整一下阿卜杜拉的回答

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

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

于 2021-07-05T12:08:56.070 回答