gpt4 book ai didi

bash - 如果未命名参数在命名参数 ("./foo unnamed -n named"之前,getopts 将忽略所有参数)

转载 作者:行者123 更新时间:2023-11-29 09:41:28 25 4
gpt4 key购买 nike

我试图理解如果“未命名”参数在任何命名参数之前,为什么 getopts 似乎忽略所有参数。

使用 http://wiki.bash-hackers.org/howto/getopts_tutorial 中的示例,

#!/bin/bash

while getopts ":a" opt; do
case $opt in
a)
echo "-a was triggered!" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
;;
esac
done

观察结果:

$ ./opt_test
$ ./opt_test -a
-a was triggered!
$ ./opt_test -a -f
-a was triggered!
Invalid option: -f
$ ./opt_test a -a -f
$ ./opt_test a -a
$ ./opt_test a -f
$ ./opt_test lala -f
$

因此,在前面加上一个未命名的参数(一个没有破折号的参数)似乎会使 getopts 忽略所有参数。

为什么会这样,我该如何解决?我希望我的程序能够捕获此类内容并打印使用屏幕。

最佳答案

程序在遇到第一个非选项参数时停止处理选项是相当标准的行为。这通常正是您想要的。例如,想想这个:

ssh someremotehost ls -l

如果 ssh 尝试在第一个非选项参数之后处理选项,您将永远无法将参数传递给远程命令。 getopt 支持的另一个标准是选项处理在 -- 参数处显式停止,因此您可以像这样删除名为 -f 的文件:

rm -- -f

如果您真的想在命令行的任何地方处理选项,您可以编写自己的选项处理例程。这并不是真的那么困难,您也可以实现对长选项的支持(--this-is-a-long-option)。

关于bash - 如果未命名参数在命名参数 ("./foo unnamed -n named"之前,getopts 将忽略所有参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com