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

ksh不在backticks中计算变量

  •  1
  • symcbean  · 技术社区  · 15 年前

    这个让我难堪。

    #!/bin/ksh
    
    AWKSCRIPT='END { print "all done"; }'
    
    OUTPUT=`echo hello world | awk '$AWKSCRIPT'`
    
    RETVAL=$?
    
    echo "running echo hello world | awk '$AWKSCRIPT'"
    echo "Output = $OUTPUT"
    echo "returned = $RETVAL"
    

    输出是

    $ ./kshawk.ksh
    Output = hello world
    returned = 0
    

    (我希望看到“输出=全部完成”)

    在计算表达式时,解释器似乎没有替换AWKSCRIPT变量(如果使用$(…)而不是反勾号,则会得到相同的行为)。

    虽然我可以将AWKSCRIPT转储到临时文件中,但这也必须硬编码?

    你知道如何在倒勾中插入一个变量吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   msw    15 年前

    周围的单引号 '$AWKSCRIPT' 防止变量插值。双引号允许插入:

    $ OUTPUT=`echo hello world | awk "$AWKSCRIPT"`
    $ echo $OUTPUT
    all done