感谢大家以前对eval的两个答案。随着我变得越来越复杂,以前的答案已经不够了,所以这里又一次
根据最后的建议,我必须使用像这样的结构
bash> eval "printf $foo"
问题是,如果
bash> foo="'"
bash eval "printf $foo"
bash: unexpected EOF while looking for matching `''
现在,我无法改变foo的分配方式。我无法逃避'还是有一些这样的。第一线必须留下来。此外,在第二行我必须有eval,我必须引用整个事情 - 必须留下,以便以前的建议仍然有效。
现在,如何打印第二行?
答案 0 :(得分:3)
echo "printf $foo" # printf '
当然,这不会奏效。您需要引号 - 正如您在分配变量时需要的那样。
eval "printf \"$foo\"" # executing printf "'"
请注意,这不是一般的解决方案:
foo='"'
eval "printf \"$foo\"" # executing printf """
通用规则,不使用eval适用于此处。考虑到你正在努力与一些基本的"我想说的是,概念加倍。
答案 1 :(得分:0)
任意设定限制的问题更适合programming puzzle exchange,但我会玩。
总结规则:
foo
的分配必须保留eval
必须留下。这很简单。只需引用参数扩展,以便在eval期间而不是之前完成:
foo="'"
eval "printf \"%s\n\" \"\$foo\""
无论foo
的价值如何,无论是单引号,双引号还是其他任何内容都可以使用。
PS:如果您正在尝试弄清楚如何为使用sh -c
的工具构建参数,则需要询问相关问题。