【发布时间】:2020-06-05 20:21:03
【问题描述】:
假设我有一个程序test.sh,它有参数,有些是可选的,有些没有。
例如:
./test.sh --foo /path/to/file --baz --bar1 --bar2 --bar3
其中foo 和baz 以及路径是必需的,bars 是可选参数。
现在,我希望能够使路径顺序之后的 所有内容 不敏感。
我可以使用
if [[ "$3" == "--baz" ]] || [[ "$4" == "--baz" ]] || ... || [[ "${(n-1)}" == "--baz" ]] || [[ "${n}" == "--baz" ]]
但这很慢而且很乱,即使对我来说也是如此。
理想情况下,我会有类似的东西:
if [[ ${n > 2} == "--baz" ]]; then
【问题讨论】:
-
使用
getopt(不是shell内置的getopts,而是GNU程序)来解析你的命令行参数。 -
@chepner 不会搜索整个命令,而不是它的特定部分吗?
-
--baz之后是否缺少参数?不传达任何信息的强制性论点有什么意义? -
@chepner 也许我应该说得更好;我的意图是“有必要选择其中一个的几个选项之一”。不过,它也可以与一个额外的论点一起使用——我正在为未来的读者概括我的问题,因为这不是我坚持的部分
-
不管怎样,使用
getopt之类的东西比重新发明轮子要好。
标签: bash shell parameters