从不使用 getopt 的脚本传递 getopt 参数

从不使用 getopt 的脚本传递 getopt 参数

我有一个脚本(我们称之为scriptC),用于getopt解析短选项和长选项并且工作正常。

该脚本的调用方式如下:
scriptA运行并使用正确的参数scriptB进行调用。scriptC

问题:是否可以将相同的参数作为实参传递给scriptA,然后最终将它们传递给scriptC
这些脚本的调用方式如下:最终
scriptB "$@"scriptB其中scriptC —param1 —param2

答案1

如果像这样scriptA调用scriptB

scriptB "$@"

那么用于调用的命令行参数scriptA将被传递,scriptB前提是这些参数在调用之前没有被更改。

scriptB对于从到 的呼叫也是如此scriptC

只要 和scriptAscriptB尝试解释、更改或以其他方式改变 的内容$@(或各个位置参数$1$2$3),命令行参数将被传递到scriptC以便用 进行解析getopt


使用函数而不是脚本的示例(其工作方式相同):

#!/bin/sh

scriptC () {
    printf 'Arg: %s\n' "$@"
}

scriptB () {
    scriptC "$@"
}

scriptA () {
    scriptB "$@"
}

scriptA -param1 -param2

这将产生输出

Arg: -param1
Arg: -param2

进行呼叫

scriptA "hello world" --param1 /etc/passwd --param2

将产生

Arg: hello world
Arg: --param1
Arg: /etc/passwd
Arg: --param2

也就是说,参数将不加修改地传递给scriptC。然后使用或其他方式scriptC解释参数。getoptgetopts

相关内容