shell 脚本一个神奇的字符比较问题

2016-04-05 22:08:00 +08:00
 imkh
# cat compare.sh 
#!/bin/bash

status=$(/tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq)
echo "$status"
if [[ "$status" == "A" ]];then 
  echo 'A'
else 
  echo 'not A'
fi

# /tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq
A
# ./compare.sh 
A
not A

为什么 /tmp/vpn/vpn1.exp | grep '10.31.90.101'|awk '{print $NF}'|uniq 输出是个 A , 但在 if [[ "$status" == "A" ]]比较确失败了?代码直接执行了 else 部分

2716 次点击
所在节点    Linux
6 条回复
curiouslfq
2016-04-05 22:14:47 +08:00
[[ "$status" = "A" ]]
BOYPT
2016-04-05 22:16:28 +08:00
你应该用 sh -x ./compare.sh 执行,看看 status 具体是什么,可能是“ A\n ”,换行了呢,或者有其他不可见符号
curiouslfq
2016-04-05 22:17:06 +08:00
确定输出只有一个字符吗
imkh
2016-04-05 22:28:49 +08:00
@BOYPT 谢谢
imkh
2016-04-05 22:29:02 +08:00
@curiouslfq 谢谢
imkh
2016-04-05 22:29:15 +08:00
status=$'A\r' 多了个回车符

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268813

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX