- 此问题在此处已有答案**:
Shell equality operators (=, ==, -eq)(4个答案)
昨天关门了。
我编写了下面的shell脚本,当使用-ne
时,它会给出结果Synced,但也会给出警告消息: integer expression expected
。
当我使用!=
时,它给出不同步...
PowerShell的日期时间和Ubuntu的日期时间不同吗?(我在比较整数和字符串吗?)
#!/bin/bash
WinTime=$(powershell.exe "& {get-date -UFormat '%Y/%m/%d %H:%M:%S'}")
WSLTime=$(date +"%Y/%m/%d %H:%M:%S")
echo "$WinTime"
echo "$WSLTime"
if [ "$WinTime" != "$WSLTime" ]; then
echo "🪟 Windows: $WinTime"
echo "🐧 WSL: $WSLTime"
echo "NotSynced"
else
echo "Synced"
fi
- 使用
!=
**:
使用-ne
:
- 使用
1条答案
按热度按时间5f0d552i1#
这个问题最初的问题是
-ne
和!=
之间的区别;评论中谈到了这一点。一旦OP切换到使用
!=
,这使得第二个问题浮到顶部......当两个字符串看起来相同时,!=
评估为“真”。这个答案解决了第二个问题......
我在
cygwin
环境中运行bash
(即,在windows下,所以我可以访问powershell.exe
)。运行OP的代码,我也得到了相同的结果:
如果我们看一下这两个变量的实际内容,我们会看到:
请注意,
$WinTime
包含一个尾随的\r
(windows/dos行尾),这是运行Windows二进制文件powershell.exe
的结果。这个额外的\r
导致条件计算为“true”,因此打印NotSynced
。OP将希望删除尾随的
\r
。我对
powershell
了解不够,不知道它是否有禁用\r
的选项,所以我让tr
删除\r
:我们可以看到
\r
已不存在:现在条件求值为“false”并打印
Synced
。**注意:**在两个时间捕获命令恰好在更改之前/之后运行(以秒为单位)的情况下,脚本仍可能报告
NotSynced