提问人:twelfth 提问时间:8/15/2023 更新时间:8/15/2023 访问量:53
检查 POSIX if 语句中字符串是否包含表情符号
Check whether string contains emoji in POSIX if statement
问:
我编写了一个 shell 脚本,根据 UTC 输出修改后的时间。目前,我抓住和更改时间的 if 语句如下:
if [[ "$emoji" =~ \.☁ ]];
then
((timeShow = time - modValue))
fi
目前,表情符号将包装在 polybar 的格式标签中。也就是说,变量将类似于 。所以我正在尝试使用上面的正则表达式检查字符串是否包含☁字符。不幸的是,这似乎不起作用。%{F#1a88a4}☁%{F-}
答:
0赞
twelfth
8/15/2023
#1
在寻找解决方案的过程中,我发现 POSIX 基本正则表达式具有不同的语法来封装字符并在字符串中搜索它。
因此,正确的代码应为(突出显示更改),并感谢@EdMorton:
if [[ "$emoji" =~ ☁ ]];
then
((timeShow = time - modValue))
fi
评论
0赞
Ed Morton
8/15/2023
这不太可能是解决您问题的最佳代码,因为您的表情符号不是正则表达式元字符,因此不必包含在括号表达式中,实际上可能是 2 个字符,如果是这样,那么绝对不能包含在括号表达式中,无论如何,您可能应该使用 awk 而不是 shell 来表示这个和周围的代码。
0赞
twelfth
8/15/2023
你能解释一下为什么吗?代码确实按预期运行,尽管我很乐意改进它。为了清楚起见,我省略了代码块中的其他语句,以保持问题简短。elif
0赞
Ed Morton
8/15/2023
提出一个新问题,包括一个最小的可重现示例,其中包含相关的周围代码(这些变量在哪里填充/使用)以及简洁、可测试的样本输入和预期输出,以便我们进一步为您提供帮助。现在,我们无法就如何以正确的方式做“它”提供建议,因为我们不知道你要做的“它”是什么。
0赞
Ed Morton
8/15/2023
这里有一个示例,说明您如何获得预期的输出,但您的代码被破坏 - 想象一下,您的表情符号实际上是 2 个字符 Control-X 和 Control-A(它实际上看起来像在我的屏幕上),当一个接一个地打印时,它会告诉您的终端显示云图像。如果你使用,你试图匹配整个多字符字符串,这很好,但是当你使用时,你试图匹配任何字符,而不是组成那个字符串,这很糟糕,因为那样它就会错误地匹配它自己。M-bM-^XM-^A$
cat -A
"$emoji" =~ ☁
"$emoji" =~ [☁]
Control-X
1赞
twelfth
8/15/2023
嗨,@EdMorton,非常感谢您的解释。我现在明白你的意思了。我刚刚写了这个问题的新形式,但不幸的是,我还不能再发帖 90 分钟。当我这样做时,我会 ping 你,但是,我的代码目前按照你的建议读取并继续,所以我认为这可能会解决它。尽管如此,我还是会发布我的问题,因为它包含进一步的背景。再次感谢你。"$emoji" =~ ☁
评论
.
.