1

实际情况有点复杂,但我遇到的问题是我在eval命令中有一个echo命令。像这样:

$ eval echo 'keep   my     spacing'
keep my spacing
$ echo 'keep   my     spacing'
keep   my     spacing

我想知道如何防止eval剥离我的间距,以便第一个命令打印出与第二个相同的消息......


这是一个更接近实际情况的示例:

$ eval `python -c 'print "echo \"keep    my     spacing\""'`
keep my spacing
4

6 回答 6

1

问题(在 python 示例中)是命令替换(反引号表达式)不受引号保护。要解决此问题,请在其周围加上双引号(为了更好地嵌套引号,请使用$()而不是反引号):

eval "$(python -c 'print "echo \"keep    my     spacing\""')"
于 2010-03-11T20:51:16.997 回答
1

eval echo "'keep my spacing'"

于 2010-03-11T20:15:28.783 回答
1
eval "echo 'keep   my     spacing'"
keep   my     spacing

如果这对您不起作用,请详细说明实际情况。

于 2010-03-11T20:16:10.950 回答
1

这不是eval

`python -c 'print "echo \"keep    my     spacing\""'`

印刷

"keep my spacing"

相反,您可以这样做:

python -c 'print "echo \"keep    my     spacing\""' | bash

这打印

keep    my     spacing
于 2010-03-11T20:16:16.487 回答
0
$ . <(python -c 'print "echo \"保持我的间距\""')
保持我的间距
于 2010-03-11T21:08:39.157 回答
0

或考虑 printf -v

于 2010-03-11T20:18:21.803 回答