local ARGV=("$@") if ! local TEMP="$(getopt -o "ndk:f:ha:s:" -l "native-build,debug,kernel:,firmware:,help,arch:,suite:" -n "$0" -- "$@")" then usage return 1 fi eval set -- "$TEMP"
时间: 2023-07-24 12:16:37 浏览: 113
command-line-args:一个成熟的,功能齐全的库,用于解析命令行选项
这段 Bash 脚本代码的作用是:
1. 将所有传递给脚本的参数存储在名为 ARGV 的本地数组变量中。
2. 使用 getopt 命令解析脚本的命令行选项和参数,并将其存储在名为 TEMP 的本地变量中。
3. 如果解析失败,则调用名为 usage 的函数并返回 1。
4. 使用 eval 命令重新设置命令行选项和参数,将它们存储在 "$@" 中。
具体来说:
1. `local ARGV=("$@")` 将所有传递给脚本的参数存储在名为 ARGV 的本地数组变量中。
2. `getopt -o "ndk:f:ha:s:" -l "native-build,debug,kernel:,firmware:,help,arch:,suite:" -n "$0" -- "$@"` 使用 getopt 命令解析脚本的命令行选项和参数,并将其存储在名为 TEMP 的本地变量中。其中,-o 表示短选项,-l 表示长选项,-n 表示脚本的名称(用于错误消息),-- 表示选项和参数的分隔符,"$@" 表示传递给脚本的所有参数。
3. 如果解析失败,则调用名为 usage 的函数并返回 1。这里的 `!` 表示如果 getopt 命令返回非零值,则执行下面的代码块。一般来说,如果 getopt 命令解析失败,它会输出错误消息并返回非零值。
4. `eval set -- "$TEMP"` 使用 eval 命令重新设置命令行选项和参数,将它们存储在 "$@" 中。这里使用 eval 命令是为了避免对命令行参数进行二次拆分,因为 getopt 命令返回的参数可能包含空格等特殊字符。
总之,这段代码的作用是解析命令行选项和参数,并将它们存储在本地变量中,以便后续处理。
阅读全文