if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'
首先if-condition不会运行,我猜这是因为报价不当,但我无法理解。
提前感谢您的帮助。
答案 0 :(得分:1)
您还可以在-F
选项的参数周围使用单引号,就像其他参数一样:
if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
答案 1 :(得分:1)
如果将测试包装在函数中,则编写测试要容易得多:
mytest()
{
echo "$1 $2" \
| awk -F"," -v arg3="$3" '{print arg3}' \
| awk -F" " -v arg1="$1" '{print arg1}' \
| sed '/^$/d'
}
这样,您可以验证它是否正常工作。一旦你获得了这种信心
if [ "$(mytest "$desc" "$status")" != "OK" ]; then
echo "howdy doody"
fi
或
if mytest "$desc" "$status" | grep -q -v '^OK$'; then
echo "howdy doody"
fi
答案 2 :(得分:0)
如果你正在使用Bash,我建议使用$(...)
而不是后引号。您收到了哪些错误消息?我的猜测是awk的-F","
选项没有被正确引用。尝试插入\
以转义引号。
答案 3 :(得分:0)
乍一看,您可能想尝试转义一些双引号:
if [ "`echo $desc $status | awk -F"," '{print $3}' | awk -F" " '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy dody"
fi
到
if [ "`echo $desc $status | awk -F\",\" '{print $3}' | awk -F\" \" '{print $1}' | sed '/^$/d'`" != "OK" ]; then
echo "howdy doody"
fi
答案 4 :(得分:0)
转义双引号肯定是一个好主意,但看起来$ 3和$ 1的目的是由awk解释。它们正由shell解释。你可能想逃避'$'。 (你可能在shell中有$ 1和$ 3的有意义的值,但不太可能。)