Понимание расширения скобок bash

Я прочитал этот пост: https://superuser.com/questions/304807/brace-expansion-run-several-commands-instead-of-expanding-on-one-line и попробовал свой eval echo способ расширения. Почему две приведенные ниже команды отличаются?


Команда 1:

$ eval echo\ {a,b,c}\;

Результат 1:

a
b
c

Команда 2:

$ eval echo\ {a,b,c} \;

Результат 2:

a echo b echo c

person Javareak    schedule 08.11.2015    source источник


Ответы (1)


eval просто сбивает с толку, так что избавьтесь от него:

$ echo echo\ {a,b,c}\;
echo a; echo b; echo c;
$ echo echo\ {a,b,c} \;
echo a echo b echo c ;

Это должно сделать очевидным то, что происходит. В первом случае eval выполняет три разные эхо-команды. Во втором случае оценивается только одна команда, которая принимает в качестве аргумента строку 'a echo b echo c'.

person William Pursell    schedule 08.11.2015