我有一个存储netcat输出的变量
var=$(echo "flush_all" | nc localhost 111)
echo $var # outputs "OK"
if test "$var" != "OK"; then
echo "failed"
exit
fi
它输出它传递但是当我想以编程方式检查它是否为真时,它失败了。我的比较有什么问题?
答案 0 :(得分:7)
似乎变量包含来自命令替换的回车符。你有几个选择。确保字符串以OK
开头:
if [[ "$var" == "OK"* ]]; then
或者,在变量赋值期间剥离CR:
var=$(echo "flush_all" | nc localhost 111 | tr -d '\r')
您可以使用od
来计算变量包含的内容。在下面的示例中,变量var
包含OK\r
,在尝试OK
变量时显示为echo
。
$ echo "$var" | od -x
0000000 4b4f 0a0d
0000004
$ echo OK | od -x
0000000 4b4f 000a
0000003