Форматирование с помощью команды echo - PullRequest
1 голос
/ 11 марта 2010

Реальная ситуация немного сложна, но проблема, с которой я сталкиваюсь, заключается в том, что у меня есть команда echo в команде eval . Вот так:

$ 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

Ответы [ 6 ]

1 голос
/ 11 марта 2010

Проблема (в примере с python) заключается в том, что подстановка команды (выражение в кавычках) не защищена кавычками. Чтобы исправить, поместите двойные кавычки вокруг него (и чтобы сделать кавычки лучше, используйте $() вместо обратных цитат):

eval "$(python -c 'print "echo \"keep    my     spacing\""')"
1 голос
/ 11 марта 2010

Это не ошибка eval:

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

отпечатков

"keep my spacing"

Вместо этого вы можете сделать это:

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

Это печатает

keep    my     spacing
1 голос
/ 11 марта 2010
eval "echo 'keep   my     spacing'"
keep   my     spacing

Если это не работает для вас, пожалуйста, объясните больше о реальной ситуации.

1 голос
/ 11 марта 2010

eval echo "'keep my spacing'"

0 голосов
/ 12 марта 2010
$ . <(python -c 'print "echo \"keep    my     spacing\""')
keep    my     spacing
0 голосов
/ 11 марта 2010

или рассмотрите printf -v

...