为什么在bash中这个*normal*字符串比较失败?
我有一个字符串,如下所示:为什么在bash中这个*normal*字符串比较失败?,bash,string-comparison,Bash,String Comparison,我有一个字符串,如下所示: DayOfWeek=$(日期+%A | tr-d'\n') echo$DayOfWeek 蒙塔格 我希望将命令的结果与字符串进行比较。就这样, [$DayOfWeek==“星期一”]&&echo True 但结果是错误的 这里还有一些尝试: [“$DayOfWeek”==“Monday”]&&echo True [$(日期+%A | tr-d'\n')=“星期一”]&回显为真 [$(日期+%A | tr-d'\n')=“星期一”]&回显为真 [$(日期+%A |
DayOfWeek=$(日期+%A | tr-d'\n')
echo$DayOfWeek
蒙塔格
我希望将命令的结果与字符串进行比较。就这样,
[$DayOfWeek==“星期一”]&&echo True
但结果是错误的
这里还有一些尝试:
[“$DayOfWeek”==“Monday”]&&echo True
[$(日期+%A | tr-d'\n')=“星期一”]&回显为真
[$(日期+%A | tr-d'\n')=“星期一”]&回显为真
[$(日期+%A | tr-d'\n')=='Monday']&&echo True
[“$(printf”%s“$DayOfWeek”)”==“星期一”]&&echo True
[“$(日期+%A | tr-d'\n')”==“星期一”]&回显为真
[[$(日期+%A | tr-d'\n')=='星期一']&&echo True
[[$(日期+%A | tr-d'\n')==“星期一”]&&echo True
最后,以下几点正在发挥作用:
[[$(日期+%A | tr-d'\n')=$(echo-n“Montag”)]]&&echo True
有人能给我解释一下bash的这种行为吗?使用的bash版本是4.4.19
致以最良好的祝愿,
akendo您在尝试中使用了英文单词
Monday
,但您的工作示例使用了Montag
。我猜您使用的是DE
locale
您可以在比较中使用Montag
,或者如果您确实需要使用英语单词,请执行以下操作:
LC_ALL=en_US.utf8 date +%A
强制使用英语区域设置。对此有一些评论:首先,我假设结果没有存储为字符串。我看了一眼。在本页的最后一行,有一个与我的方法非常相似的示例。在本例中,它们的功能完全相同,只需使用
=
而不是=
,因此即使存储到bash变量中,它也应该保持为字符串?=
是字符串的常规比较运算符,而不是=
。你想用它做什么?除非你搞乱了IFS,否则它是不需要的?你的每一次尝试都对我有用(bash 4.4.12
)-请注意,你的上一个例子有Montag
-这是一个区域设置,不是bash问题…我有这个似乎支持我的观点。tr
将删除换行符,因为我确实假设他会将其存储在字符串中,这就是失败的原因。[$DayOfWeek==“Monday”]
完全是错误的引用方式。字符串Monday
不包含任何变量,不需要保护它不受插值的影响。忽略=
而不是=
的问题,最好将其写成[“$DayOfWeek”=Monday]
。由于引号似乎会引起混淆,因此最好编写[“$DayOfWeek”=“Monday”]