Linux命令在shell命令行中表现奇怪

Yan*_*hao 3 bash shell command-line

请看下面的命令:

administrator@ubuntu:~/usp$ cat file
c
b
a
administrator@ubuntu:~/usp$ x="cat file | sort"
administrator@ubuntu:~/usp$ $x
c
b
a
cat: |: ?????????
cat: sort: ?????????
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么$ x的输出不是:

a
b
c
Run Code Online (Sandbox Code Playgroud)

剂量双引号改变命令的行为cat file | sort

Mat*_*Mat 7

发生的事情是$x作为单个命令执行.shell不是"重新解析"内容$x,因此它不是特别是设置重定向和产生sort.

什么情况是, cat被交给三个参数:file,|sort.您没有名为|sort在该目录中的文件,因此cat无法打开它们.(我猜这个错误说的是1.)

您可以通过运行获得预期的结果:

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

eval如果可以,我会避免使用它,这可能很危险.

1LC_ALL=在国际站点上寻求帮助之前,请使用命令前缀获取英语错误消息.
例如LC_ALL= $x.

  • @WenhaoYang:在发布另一个问题之前,请检查[BashFAQ#50:我正在尝试将命令放入变量中,但复杂的情况总是失败!](http://mywiki.wooledge.org/BashFAQ/050)看看它是否涵盖了你需要的东西. (3认同)
  • @Wenhao Yang:你应该问一个新的问题,但一定要包含足够的细节,因为这看起来有点奇怪.你不能使用函数而不是变量吗? (2认同)