如果在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是不行的