现象:
1. 执行命令拿到数字赋值给变量进行if判断
2. 报错: integer expression expected
3. 但是变量输出也没有其他的字符
[root@handsometa_2401 ~]# index=$(docker exec -it ta bash -c "cat /root/ta/lv| grep -c 1111 ")
[root@handsometa_2401 ~]# echo ${index}
0
[root@handsometa_2401 ~]# if [ $index -eq 0 ];then echo true; else echo false; fi
: integer expression expected
false
分析:
1. 手动定义变量赋值0发现是可以正常if判断的
[root@handsometa_2401 ~]# index=0
[root@handsometa_2401 ~]# if [ $index -eq 0 ];then true; else echo false; fi
[root@handsometa_2401 ~]# if [ $index -eq 0 ];then echo true; else echo false; fi
true
怀疑变量是有特殊字符,但是直接输出看不到
2. 直接执行该变量
[root@handsometa_2401 ~]# index=$(docker exec -it ta bash -c "cat /root/ta/lv| grep -c 1111 ")
[root@handsometa_2401 ~]# echo ${index}
0
[root@handsometa_2401 ~]# if [ $index -eq 0 ];then echo true; else echo false; fi
: integer expression expected
false
[root@handsometa_2401 ~]# ${index}
-bash: $'0\r': command not found
果然看到了特殊字符
解决:
通过awk将变量特殊字符给替换成空
发现直接执行没有特殊字符了
[root@handsometa_2401 ~]# index=$(docker exec -it ta bash -c "cat /root/ta/lv| grep -c 1111 "|awk '{sub("\r","");print $0}')
[root@handsometa_2401 ~]# $index
-bash: 0: command not found
效果:
ok了
[root@handsometa_2401 ~]# if [ $index -eq 0 ];then echo true; else echo false; fi
true