当我尝试执行时ls|more,该命令运行良好,但是当我尝试将命令保存在一个变量中x='ls|more',然后使用它执行时,$x出现以下错误:
ls: 无法访问 |: 没有那个文件或目录
ls: 不能访问更多: 没有那个文件或目录
为什么?
当你执行
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)
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |