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

时间:2013-05-05 15:02:01

标签: 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: 没有那个文件或目录

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

a
b
c

使用双引号来改变命令cat file | sort的行为?

1 个答案:

答案 0 :(得分:7)

正在发生的事情是$x作为单个命令执行。 shell不会“重新解析”$x的内容,因此特别是设置重定向和生成sort

cat会传递三个参数:file|sort。您在该目录中没有名为|sort的文件,因此cat无法打开它们。 (我猜这个错误说的是 1 。)

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

eval "$x"

如果可以的话,我会避免使用eval can be dangerous

1 LC_ALL=前面输入您的命令,以便在国际网站上寻求帮助之前获取英文错误消息。
例如LC_ALL= $x