Bash IF语句:命令输出的字符串比较总是为false

时间:2016-02-05 01:04:41

标签: bash if-statement gnu-screen

您好我正在尝试编写一个简单的bash脚本来附加到屏幕会话。如果会话尚未启动,那么它将启动它并尝试再次附加。

我遇到的问题是if语句;它应该将screen命令的输出与失败消息进行比较,如果它们相等,则继续启动会话并附加。但它总是转到else子句,打印出我正在检查的错误消息:s

两个字符串包含相同的内容:

  

"没有与sctest匹配的屏幕。"

但是bash认为他们是不同的......

这里是bash脚本,我错过了什么?

#!/bin/bash

screenOutput=$(screen -aA -x sctest);
failString="There is no screen to be attached matching sctest.";

if [ "$screenOutput" = "$failString" ]; then
    echo "screen session not started. starting now...";

    # . ./init.sh

    # echo $(screen -aA -x sctest);
else
    echo "$screenOutput";
fi

1 个答案:

答案 0 :(得分:3)

使用myObj a = null;(或调用set -x)打印每一行,因为它的评估值会以隐藏字符可见和人类可读的方式展开。

最有可能的是,您会看到以下内容:

bash -x yourscript

......后者最后有一个[ 'There is no screen to be attached matching sctest' = $'There is no screen to be attached matching sctest\r' ] 。这是回车。

要删除它,您可以像这样修改代码:

\r