shell - 伯恩 shell : send arguments $2 to $N to variadic function?

标签 shell variadic-functions sh

谷歌终于让我失望了。我似乎无法在 Bourne shell 脚本中找到如何执行此操作:

我正在编写一个 shell 脚本来处理我对一个项目的所有测试。我已经为该脚本可以执行的每个任务(构建、运行、清理等)设置了函数,并希望将任何其他命令行参数(除了命令本身)传递给所需的函数。

例子:
./test.sh build -j应该通过-jbuild功能。

此逻辑的伪代码版本如下所示:

function build() {
   make $*
}

if [ $1 == 'build' ]; then
   build $2 -> $N
fi

我怎样才能做到这一点?

最佳答案

我认为您可以使用 shift 实现这种效果。命令。它将所有位置参数下移一位并降低 $1 的值。 (因此 $3 的值移动到 $2$2 的值移动到 $1 并且 $1 的值丢失)。完成后,您可以使用 $@选择您真正感兴趣的参数列表,例如

function build() {
    echo "build with $@"
}

echo "Starting args are $@"
cmd=$1
shift

if [ "$cmd" = 'build' ]; then
    build "$@"
fi

关于shell - 伯恩 shell : send arguments $2 to $N to variadic function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12002954/

相关文章:

java - 可变参数堆污染 : what's the big deal?

linux - 查看昨天/今天的日志

function - shell 脚本函数参数/参数

linux - 如何在没有 `disown` 或 gdb 的情况下关闭进程的标准输出和标准错误?

Python——使用指定的shell执行shell命令

c++ - 使用 va_copy 有什么意义?

c++ - 使用可变模板参数的构造函数和函数

linux - 如何将以下日期更改为 2 个特定表格? (Linux 终端/shell )

bash - 如何找到两个日期之间的天数差异?

unix - 注释掉 shell 脚本中的一组行