【发布时间】:2016-01-20 22:00:28
【问题描述】:
我有一个文件file1,内容如下:
Z
X
Y
我可以使用cat查看文件:
$ cat file1
Z
X
Y
我可以对文件进行排序:
$ sort -k1,1 file1
X
Y
Z
我可以对其进行排序并将输出存储在一个变量中:
sorted_file1=$(sort -k1,1 file1)
但是当我尝试在变量 sorted_file1 上使用 cat 时,我得到一个错误:
$ cat "$sorted_file1"
cat: X
Y
Z: No such file or directory
我可以使用echo,它看起来不错,但在我的脚本中表现得很奇怪:
$ echo "$sorted_file1"
X
Y
Z
为什么会这样?存储命令的输出如何改变 cat 解释它的方式?
有没有更好的方法将 shell 命令的输出存储在变量中以避免此类问题?
【问题讨论】:
-
所以我应该一直使用
echo? -
cat file1打印指定文件的内容,而不是名称本身。为什么你会期望与cat "$sorted_file1"有不同的行为? -
不管怎样,您可以使用
cat <<< "$sorted_file1"作为 echo 的替代品。 -
我希望
cat file1以与打印命名文件内容相同的方式打印变量的内容。显然这是不正确的。 -
cat没有将变量作为参数; shell 将变量扩展为它的值,cat接收 that 作为它的参数。