提问人:cjt00 提问时间:8/8/2023 更新时间:8/8/2023 访问量:78
Bash 意外行为中与通配符的字符串比较
String Comparison with Wildcard in Bash Unexpected Behaviour
问:
这可能很容易解决,但我似乎找不到适合这里的解决方案。
我无法弄清楚为什么这个 if 语句的评估结果为 true:
#/bin/bash
err="User dimensions query limit exceeded"
if [ "${err}" != "User"* ]; then
echo "In the if statement"
exit 1
fi
我尝试了括号的各种组合并移动 *,将 != 更改为 -ne 等,但无济于事。
谢谢。
答:
2赞
Jon Skeet
8/8/2023
#1
我相信这是因为您正在使用而不是.我的猜测是,当您不希望它时,正在执行文件名扩展。[ ... ]
[[ ... ]]
"User"*
只是使用特定于 bash 的,应该修复它:[[
]]
#/bin/bash
err="User dimensions query limit exceeded"
if [[ "${err}" != "User"* ]]; then
echo "In the if statement"
exit 1
fi
在这一点上,我怀疑条件行可以简化,因为 bash 如何处理:[[ ... ]]
if [[ $err != User* ]]; then
...但我对细节的了解还不够多,无法 100% 自信。(它适用于我的简短测试......
评论
sh
case
[[
[
[