gpt4 book ai didi

bash - 在 case 语句中检查 '?' 的正确方法是什么

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

我有以下使用 getopts 的 bash 脚本。我的代码按预期工作,即指定无效选项时,$myopt 变量设置为“?”字符和 case 语句当前处理匹配 '?' 的代码。
我在其他地方看到使用“\?”的类似代码而不仅仅是“?”在 case 语句中(请查看代码块的最后三行注释)。

'?' 有什么具体原因吗?逃脱了吗?我知道可以使用“\”转义任何字符,但我的代码在不转义“?”的情况下工作得很好。

#!/bin/bash
while getopts ":abc" myopt; do
case $myopt in
[a-c])
echo "$myopt is a valid option!" >&2
;;
?)
echo "$OPTARG is an invalid option!" >&2
;;
# \?)
# echo "$OPTARG is an invalid option!" >&2
# ;;
esac
done

为了其他阅读者的利益,下面的代码只有在 '?' 时才有效。被转义(请参阅已接受的答案以获得很好的解释)。

#!/bin/bash 
while getopts ":abc" myopt; do
case $myopt in
\?)
echo "$OPTARG is an invalid option!" >&2
;;

[a-c])
echo "$myopt is a valid option!" >&2
;;
esac
done

如果脚本文件是myscript.sh 可以这样测试-

./myscript.sh -a -z -a  

最佳答案

对于 Bash case 语句,? 是匹配任何单个字符/数字的通配符。如果您使用 \? 转义它,它会专门尝试匹配 '?' 字符。

case 将继续寻找匹配项,因此在这种情况下,如果变量不是 [a-c](a、b 或 c),那么它将匹配如果它的变量是 1 个字符。

关于bash - 在 case 语句中检查 '?' 的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47083088/

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