Linux bash 中的 if 语句

Linux bash 中的 if 语句

我尝试在 if 语句中比较两个字符串。但是,由于程序每次都通过第一个条件,因此比较似乎无法正确运行。

#!/bin/bash
switch=$(ssh 192.168.14.10 egrep somefile /tmp/tmpfile.txt)
if [ "$switch" == "tmp" ]; then
     echo "expected output"
else
     echo "unexpected output"
fi

每次输出都会达到“预期输出”。我什至尝试将第一个条件更改为“!=”,但它仍然到达第一个语句。

答案1

您的比较是正确且惯用的 Bash 代码。

尝试echo "switch='$switch'"在之前插入if,看看每次变量内容是什么。

答案2

我首先排除虚假空间:

if [ "$(printf "%s" "$switch"| tr -d " ")" = tmp ]; then

如果仍然不成功,请在测试之前添加这两行。如果它们的输出不同,请修复您的测试。

echo tmp | od -c
echo "$switch" | od -c

答案3

将第一行更改为:

switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

至以下内容:

export switch=$(ssh 192.16810.10.10 egrep somefile /tmp/tmpfile.txt)

我之前多次遇到过几乎相同的问题,或者在递增变量时遇到过。其中variable=$variable++orvariable=$variable+1会在每次循环时将文本字符串"+1"or附加"++"到末尾,而不是像应有的那样递增。

使用let variable=$variable++let variable=$variable+1立即解决问题。export如果在循环开始之前一切都已设置,则使用也有效。

我相信 bash 在存储该变量时做错了什么。因此,它使比较起作用,并且使用 let/export 做了一些不同的事情来存储它。我正在寻找同一问题的答案,但比较数字而不是字符串时得到的结果不一致。无论如何,在第一个语句之前尝试使用导出不会有什么坏处。

相关内容