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

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

$ 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 部分


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

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

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


sh -x your_script.sh 试一下

【热门文章】
【热门文章】