在 bash 中使用 getopts 的布尔 cli 标志?
Boolean cli flag using getopts in bash?
是否可以在 bash 中使用 getopts 实现布尔 cli 选项?基本上,如果指定了 -x
,我想做一件事;如果没有指定,我想做另一件事。
当然可以。 @JonathanLeffler 几乎已经在问题的评论中给出了答案,所以我在这里要做的就是添加一个实现示例和一些需要考虑的细节:
#!/usr/bin/env bash
# Initialise option flag with a false value
OPT_X='false'
# Process all options supplied on the command line
while getopts ':x' 'OPTKEY'; do
case ${OPTKEY} in
'x')
# Update the value of the option x flag we defined above
OPT_X='true'
;;
'?')
echo "INVALID OPTION -- ${OPTARG}" >&2
exit 1
;;
':')
echo "MISSING ARGUMENT for option -- ${OPTARG}" >&2
exit 1
;;
*)
echo "UNIMPLEMENTED OPTION -- ${OPTKEY}" >&2
exit 1
;;
esac
done
# [optional] Remove all options processed by getopts.
shift $(( OPTIND - 1 ))
[[ "" == "--" ]] && shift
# "do one thing if -x is specified and another if it is not"
if ${OPT_X}; then
echo "Option x was supplied on the command line"
else
echo "Option x was not supplied on the command line"
fi
关于上面例子的几点说明:
true
和 false
用作选项 x 指示符,因为它们都是有效的 UNIX 命令。在我看来,这使得选项存在的测试更具可读性。
getopts
在静默错误报告模式下配置为 运行,因为它抑制默认错误消息并允许更精确的错误处理。
该示例包括用于处理缺少的选项参数和 post-getopts 命令行参数的代码片段。这些不是 OP 问题的一部分。
添加它们是为了完整起见,因为在任何相当复杂的脚本中都需要此代码。
有关 getopts
的更多信息,请参阅 Bash Hackers Wiki: Small getopts tutorial
是否可以在 bash 中使用 getopts 实现布尔 cli 选项?基本上,如果指定了 -x
,我想做一件事;如果没有指定,我想做另一件事。
当然可以。 @JonathanLeffler 几乎已经在问题的评论中给出了答案,所以我在这里要做的就是添加一个实现示例和一些需要考虑的细节:
#!/usr/bin/env bash
# Initialise option flag with a false value
OPT_X='false'
# Process all options supplied on the command line
while getopts ':x' 'OPTKEY'; do
case ${OPTKEY} in
'x')
# Update the value of the option x flag we defined above
OPT_X='true'
;;
'?')
echo "INVALID OPTION -- ${OPTARG}" >&2
exit 1
;;
':')
echo "MISSING ARGUMENT for option -- ${OPTARG}" >&2
exit 1
;;
*)
echo "UNIMPLEMENTED OPTION -- ${OPTKEY}" >&2
exit 1
;;
esac
done
# [optional] Remove all options processed by getopts.
shift $(( OPTIND - 1 ))
[[ "" == "--" ]] && shift
# "do one thing if -x is specified and another if it is not"
if ${OPT_X}; then
echo "Option x was supplied on the command line"
else
echo "Option x was not supplied on the command line"
fi
关于上面例子的几点说明:
true
和false
用作选项 x 指示符,因为它们都是有效的 UNIX 命令。在我看来,这使得选项存在的测试更具可读性。getopts
在静默错误报告模式下配置为 运行,因为它抑制默认错误消息并允许更精确的错误处理。该示例包括用于处理缺少的选项参数和 post-getopts 命令行参数的代码片段。这些不是 OP 问题的一部分。
添加它们是为了完整起见,因为在任何相当复杂的脚本中都需要此代码。
有关 getopts
的更多信息,请参阅 Bash Hackers Wiki: Small getopts tutorial