题
/!bin / sh的
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'
首先,如果条件将无法运行,即时猜测这是因为报价不当,但我不能看着办吧。
预先感谢任何帮助。
解决方案
如果你正在使用bash,我建议$(...)
而不是反引号。你得到什么错误信息?我的猜测是,-F","
选项AWK没有被正确引用。试图插入\
逃脱引号。
其他提示
您还可以使用单引号括起来的参数来-F
选择,因为你周围的其他参数:
if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
这是很容易,如果你在一个函数包裹,写你的测试:
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
乍一看,你可能会想尝试一些逃避双引号的:
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
逃脱双引号无疑是一个好主意,但它看起来像$ 3和$ 1旨在由AWK解释。他们是被你的shell来解释吧。你可能想逃离'$的。 (这可能是你有$ 1和$ 3中的外壳,但不太可能有意义的值。)
不隶属于 StackOverflow