代码之家  ›  专栏  ›  技术社区  ›  Anders

伯恩壳牌公司单报价、双报价和反报价问题

  •  1
  • Anders  · 技术社区  · 16 年前

       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'
    

    首先,如果条件不能运行,我猜这是因为不正确的报价,但我不能弄清楚。

    5 回复  |  直到 6 年前
        1
  •  0
  •   JesperE    16 年前

    如果您使用的是Bash,我建议您 $(...) 而不是反报价。您会收到什么错误消息?我的猜测是 -F"," \ 避开引号。

        2
  •  1
  •   Dennis Williamson    16 年前

    -F 选项,因为您有其他参数:

    if [ "`echo $desc $status | awk -F',' '{print $3}' | awk -F' ' '{print $1}' | sed '/^$/d'`" != "OK" ]; then
    
        3
  •  1
  •   Chk Chk Chk    11 年前

    如果将测试封装在函数中,编写测试会容易得多:

    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
    
        4
  •  0
  •   Adam Luchjenbroers    16 年前

    乍一看,您可能希望尝试转义一些双引号:

       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
    
        5
  •  0
  •   William Pursell    16 年前

    避开双引号当然是个好主意,但看起来$3和$1是由awk解释的。它们由shell来解释。你可能想避开“$”的(shell中的$1和$3可能具有有意义的值,但不太可能。)

    推荐文章