如果在shell中定义一个命令,带了管道,例如
CMD="ls -al | grep xx"
直接执行$CMD,会出现如下报错
ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
管道符会被解释为普通字符
解决的办法是通过eval
CMD="eval ls -al | grep xx"
另外如果CMD被用在if 或 while的语句中,需要用$($CMD)或`$CMD`来获得结果,直接$CMD是不行的