“有麻烦”;如果等式";Bash中的语句

“有麻烦”;如果等式";Bash中的语句,bash,if-statement,compare,Bash,If Statement,Compare,我编写了一个简短的脚本,从远程主机上的/etc/sudoers(##Expires 12122012)中提取一行,然后使用date+%d%m%Y将其与今天的日期进行比较。即使在显示分配给它们的变量时这两个值看起来相同,if语句也不会将它们显示为匹配项。下面是脚本和输出。额外的echo语句用于验证实际匹配的变量 #!/bin/bash TODAY=`date +%d%m%Y` EXPIRES=`ssh -t hostname "grep Expires /etc/sudoers"` EXPIRED

我编写了一个简短的脚本,从远程主机上的/etc/sudoers(##Expires 12122012)中提取一行,然后使用
date+%d%m%Y
将其与今天的日期进行比较。即使在显示分配给它们的变量时这两个值看起来相同,if语句也不会将它们显示为匹配项。下面是脚本和输出。额外的echo语句用于验证实际匹配的变量

#!/bin/bash
TODAY=`date +%d%m%Y`
EXPIRES=`ssh -t hostname "grep Expires /etc/sudoers"`
EXPIREDATE=`echo $EXPIRES | awk -F " " '{ printf $3 }'`

if [ $TODAY = $EXPIREDATE ]
    then
            echo "This matches"
            exit
    else
            echo "this doesn't match"
            echo "$TODAY"
            echo "$EXPIREDATE"
            exit
fi
exit
输出: sh试验

我尝试了多种不同的比较方法,但没有成功。欢迎提出任何意见。谢谢

更新
在应用了注释中关于检查空白的一些建议之后,我能够看到更多关于echo语句的内容。不太清楚这是怎么发生的

#>echo test${TODAY}more
   test12122012more
#>echo test${EXPIREDATE}more
   more12122012

您的远程文件正在使用CRLF换行符。您需要通过
tr
传递文本,以去除CR

... | tr -d '\r'

尝试引用字符串:
如果[“$TODAY”=“$EXPIREDATE”]
。您可以通过
cat thing | od-c
发送程序的输出吗?字符串中可能有空格或换行符。与其打印
echo“$TODAY”
,不如打印
echo“test${TODAY}test”
,它将显示空白。@spaceknarf:如果不在变量前后放置相同的内容,以防出现windows行结尾的情况,这会更有趣。如果这就是我们这里的内容,并且您回显
“test${EXPIREDATE}foo”
,则输出将是
foot1212…
:)@unwind我尝试了两边的引号,但没有成功。谢谢你的建议,我在var之前和之后添加了行,这肯定暴露了一个问题。请参见下面的
test12122012单词12122012
就是它做到了!非常感谢你。我一直在失去理智,试图让它发挥作用:)
... | tr -d '\r'