1

/!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'

第一个 if-condition 不会运行,我猜这是因为引用不当,但我无法弄清楚。

提前感谢您的帮助。

4

5 回答 5

1

您也可以在选项的参数周围使用单引号,-F就像在其他参数周围一样:

if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
于 2009-12-29T13:32:02.643 回答
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
于 2014-09-13T09:00:41.710 回答
0

如果您使用的是 Bash,我建议您不要使用$(...)反引号。你得到什么错误信息?我的猜测是-F","没有正确引用 awk 的选项。尝试插入\以转义引号。

于 2009-12-29T10:49:46.547 回答
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
于 2009-12-29T10:59:49.160 回答
0

转义双引号当然是个好主意,但看起来 $3 和 $1 是要由 awk 解释的。它们正在由您的 shell 解释。你可能想逃避'$'。(您可能在 shell 中对 $1 和 $3 有有意义的值,但不太可能。)

于 2009-12-29T15:33:43.303 回答