/!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中的外壳,但不太可能有意义的值。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top