为什么这个命令不能执行?

ana*_*kin 1 linux unix

当我尝试执行时ls|more,该命令运行良好,但是当我尝试将命令保存在一个变量中x='ls|more',然后使用它执行时,$x出现以下错误:

ls: 无法访问 |: 没有那个文件或目录
ls: 不能访问更多: 没有那个文件或目录

为什么?

gar*_*ohn 5

当你执行

ls|more
Run Code Online (Sandbox Code Playgroud)

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

$x
Run Code Online (Sandbox Code Playgroud)

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

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

eval "$x"
Run Code Online (Sandbox Code Playgroud)