linux - shell 脚本一个神奇的字符比较问题
黄舟
黄舟 2017-04-17 14:40:39
[Linux讨论组]
$ 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 部分

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(2)
天蓬老师

sh -x your_script.sh 试一下

黄舟

bash的语法和书写格式都要分外注意, 特别是空格,分隔号等,该加的要加,不该加的就不能加
从这点来说bash的语法设计是糟糕的。

回到你的问题本身来说, 可能是status这个变量,其值是A[space], 只是说因为print出来那个空格看不到显现不出来而已。
你可以用echo "||$status||"来替换echo "$status", 这样就能看到space了。

如果是这样的情况, 那if判断出来的的确是false, 应该显示为not A

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号