为什么这个*正常*字符串在 bash 中比较失败?
Why does this *normal* string compare failed in bash?
我有一个字符串,像这样:
DayOfWeek=$(date +%A|tr -d '\n')
echo $DayOfWeek
Montag
我想将命令的结果与字符串进行比较。就像这样:
[ $DayOfWeek == "Monday" ] && echo True
但是结果随时都是假的。
这里还有一些尝试:
[ "$DayOfWeek" == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == 'Monday' ] && echo True
[ "$(printf "%s" "$DayOfWeek")" == "Monday" ] && echo True
[ "$(date +%A|tr -d '\n')" == 'Monday' ] && echo True
[[ $(date +%A|tr -d '\n') == 'Monday' ]] && echo True
[[ $(date +%A|tr -d '\n') == "Monday" ]] && echo True
最后以下是工作:
[[ $(date +%A|tr -d '\n') == $(echo -n "Montag") ]] && echo True
有人可以向我解释 bash 的这种行为吗?使用的bash是版本4.4.19.
此致,
阿肯多
您在尝试中使用的是英文单词 Monday
,但您的工作示例使用的是 Montag
。我猜你正在使用 DE
语言环境。
您可以通过在比较中使用 Montag
来解决此问题,或者如果您确实需要使用英文单词,请执行以下操作:
LC_ALL=en_US.utf8 date +%A
强制使用英语语言环境。
我有一个字符串,像这样:
DayOfWeek=$(date +%A|tr -d '\n')
echo $DayOfWeek
Montag
我想将命令的结果与字符串进行比较。就像这样:
[ $DayOfWeek == "Monday" ] && echo True
但是结果随时都是假的。
这里还有一些尝试:
[ "$DayOfWeek" == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == "Monday" ] && echo True
[ $(date +%A|tr -d '\n') == 'Monday' ] && echo True
[ "$(printf "%s" "$DayOfWeek")" == "Monday" ] && echo True
[ "$(date +%A|tr -d '\n')" == 'Monday' ] && echo True
[[ $(date +%A|tr -d '\n') == 'Monday' ]] && echo True
[[ $(date +%A|tr -d '\n') == "Monday" ]] && echo True
最后以下是工作:
[[ $(date +%A|tr -d '\n') == $(echo -n "Montag") ]] && echo True
有人可以向我解释 bash 的这种行为吗?使用的bash是版本4.4.19.
此致, 阿肯多
您在尝试中使用的是英文单词 Monday
,但您的工作示例使用的是 Montag
。我猜你正在使用 DE
语言环境。
您可以通过在比较中使用 Montag
来解决此问题,或者如果您确实需要使用英文单词,请执行以下操作:
LC_ALL=en_US.utf8 date +%A
强制使用英语语言环境。