【发布时间】:2019-06-16 08:55:04
【问题描述】:
我想在大小写切换中对匹配的行执行一些操作。而且因为字符串很长,我想使用 bash 花括号。但它不起作用。
这段没有花括号的代码按预期工作:
for i in longstr_one longstr_two; do
case $i in
longstr_one| longstr_five)
echo matched $i
;;
*)
echo no matches of $i
;;
esac
done
我得到了预期的结果:
matched longstr_one
no matches of longstr_two
但以下带花括号的代码没有:
for i in longstr_one longstr_two; do
case $i in
longstr_{one|,five})
echo matched $i
;;
*)
echo no matches of $i
;;
esac
done
我得到了错误的结果:
no matches of longstr_one
no matches of longstr_two
为什么它不起作用? bash 中的大小写选择器是否可以使用花括号?
【问题讨论】:
-
case基于通配符(或“glob”)模式匹配;大括号扩展是另一回事。您最好的选择可能是启用extglob,并使用扩展的 glob 语法。 -
替代方案:两个嵌套的
case语句,longstr_*),然后是*one|*five)。
标签: bash case glob curly-braces brace-expansion