了解bash括号扩展

Jav*_*eak 1 linux bash expansion brace-expansion

我读了这篇文章:https : //superuser.com/questions/304807/brace-expansion-run-several-commands-instead-of-expanding-on-one-line,并尝试了其eval echo扩展方式。为什么以下两个命令不同?


指令1:

$ eval echo\ {a,b,c}\;
Run Code Online (Sandbox Code Playgroud)

结果1:

a
b
c
Run Code Online (Sandbox Code Playgroud)

指令2:

$ eval echo\ {a,b,c} \;
Run Code Online (Sandbox Code Playgroud)

结果2:

a echo b echo c
Run Code Online (Sandbox Code Playgroud)

Wil*_*ell 5

eval只是混乱的东西,所以摆脱它:

$ echo echo\ {a,b,c}\;
echo a; echo b; echo c;
$ echo echo\ {a,b,c} \;
echo a echo b echo c ;
Run Code Online (Sandbox Code Playgroud)

这应该使正在发生的事情变得显而易见。在第一种情况下,eval执行三个不同的回显命令。在第二个中,它仅评估一个以字符串“ a echo b echo c”作为参数的命令。