请看下面的命令:
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: 没有那个文件或目录
我的问题是为什么$ x的输出不是:
a
b
c
使用双引号来改变命令cat file | sort
的行为?
答案 0 :(得分:7)
正在发生的事情是$x
作为单个命令执行。 shell不会“重新解析”$x
的内容,因此特别是设置重定向和生成sort
。
cat
会传递三个参数:file
,|
和sort
。您在该目录中没有名为|
或sort
的文件,因此cat
无法打开它们。 (我猜这个错误说的是 1 。)
您可以通过运行获得您期望的结果:
eval "$x"
如果可以的话,我会避免使用eval
can be dangerous。
1 在LC_ALL=
前面输入您的命令,以便在国际网站上寻求帮助之前获取英文错误消息。
例如LC_ALL= $x
。 子>