Почему eval не может создать правильный псевдоним? - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть этот код:

foo=bar
eval alias $foo="echo $foo"

, но псевдоним создается как

alias bar='echo'

, а не

alias bar='echo bar'

Почему $foo не получаетсяправильно расширен в определении псевдонима?

1 Ответ

0 голосов
/ 08 декабря 2018

Вам необходимо:

eval alias bar="\"echo $foo\""

или просто:

eval alias bar=\"echo $foo\"

Смысл состоит в том, чтобы передавать двойные кавычки как буквальные кавычки команде eval.Вы можете проверить, как Bash будет анализировать данную команду, используя Управление - Alt - e связывание клавиш, которое вызывает shell-expand-line, сначала введя команду:

eval alias bar="\"echo $foo\""

И затем выполнить связывание клавиш вместо Введите .Обратите внимание, что если набрано eval alias $foo="echo $foo", это отображается:

eval alias bar=echo bar

, но когда набирается eval alias bar=\"echo $foo\", это отображается:

eval alias bar="echo bar"
...