为什么这个命令无法执行?

为什么这个命令无法执行?

当我尝试执行时ls|more,命令运行正常,但是当我尝试将命令保存在类似的变量中x='ls|more',然后使用它执行时,$x出现以下错误:

ls:无法访问 |:没有此文件或目录
ls:无法访问更多:没有此文件或目录

为什么?

答案1

当你执行

ls|more

shell 解析该行,并将这三个标记理解为命令ls后跟管道,后跟命令more。当您执行

$x

shell 会扩展该变量,但不会解析结果,至少不会以相同的方式解析。它会在空格处拆分变量的内容,将第一个字符序列作为命令名称,将后面的字符序列作为参数。因此,它会将 理解ls|more为命令ls|morels | more将 理解为命令ls后跟参数|more并将ls理解为文件名。

要让 shell 重新解析该变量的内容,请使用eval,如下所示:

eval "$x"

相关内容