继续eval传奇:如何评估单一报价

时间:2014-08-16 10:58:32

标签: bash

感谢大家以前对eval的两个答案。随着我变得越来越复杂,以前的答案已经不够了,所以这里又一次

根据最后的建议,我必须使用像这样的结构

bash> eval "printf $foo"

问题是,如果

bash> foo="'"

bash eval "printf $foo"
bash: unexpected EOF while looking for matching `''

现在,我无法改变foo的分配方式。我无法逃避'还是有一些这样的。第一线必须留下来。此外,在第二行我必须有eval,我必须引用整个事情 - 必须留下,以便以前的建议仍然有效。

现在,如何打印第二行?

2 个答案:

答案 0 :(得分:3)

echo "printf $foo"      # printf ' 

当然,这不会奏效。您需要引号 - 正如您在分配变量时需要的那样。

eval "printf \"$foo\""  # executing printf "'"

请注意,这不是一般的解决方案:

foo='"'
eval "printf \"$foo\""  # executing printf """

通用规则,不使用eval适用于此处。考虑到你正在努力与一些基本的"我想说的是,概念加倍。

答案 1 :(得分:0)

任意设定限制的问题更适合programming puzzle exchange,但我会玩。

总结规则:

  1. foo的分配必须保留
  2. eval必须留下。
  3. eval的参数必须是一个双引号字符串,包含您选择的内容。
  4. 最终结果应该是打印变量foo(?)
  5. 的内容

    这很简单。只需引用参数扩展,以便在eval期间而不是之前完成:

    foo="'"
    eval "printf \"%s\n\" \"\$foo\""
    

    无论foo的价值如何,无论是单引号,双引号还是其他任何内容都可以使用。

    PS:如果您正在尝试弄清楚如何为使用sh -c的工具构建参数,则需要询问相关问题。