请看下面的命令:
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
吗?
请看下面的命令:
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
吗?
正在发生的事情是$x
作为单个命令执行的。shell 不会“重新解析” 的内容$x
,因此特别是不会设置重定向和生成sort
。
发生的情况是 cat
得到三个参数file
:|
和sort
。您在该目录中没有名为|
or的文件sort
,因此cat
无法打开它们。(我猜无论如何,错误所说的是1。)
你可以通过运行得到你期望的结果:
eval "$x"
eval
如果可以的话,我会避免使用,它可能很危险。
1LC_ALL=
在国际网站上寻求帮助之前,为您的命令添加前缀以获取英文错误消息。
例如LC_ALL= $x
。