为什么 'echo $(cat /path/to/fileName)' 列出我的文件和方向?

αғs*_*нιη 1 command-line echo

当我用 打印出一个文件的内容时echo $(cat /path/to/filename),它也会列出我的文件和方向。但是当我使用printf "$(cat /path/to/filename)\n"它时效果很好。

我也尝试将它保存到一个变量中content='cat /path/to/filename'(也content=$(cat /path/to/filename),然后打印 by echo $content,但我得到了相同的结果(列出文件和方向)。

我想将文件的内容存储到变量中,并将变量作为下一个命令的输入传递到我的脚本中。

请注意,我的文件的内容中有特殊字符*

cuo*_*glm 7

因为在执行命令替换后,如果您不引用它们,shell 会对结果执行分词(或字段拆分)。

POSIX 将词扩展定义为:

单词扩展顺序如下:

  1. 波浪号扩展(参见波浪号扩展)、参数扩展(参见参数扩展)、命令替换(参见命令替换)和算术扩展(参见算术扩展)应从头到尾执行。请参阅令牌识别中的第 5 项。

  2. 字段拆分(参见字段拆分)应在步骤 1 生成的字段部分上执行,除非 IFS 为 null

  3. 除非 set -f 有效,否则应执行路径名扩展(请参阅路径名扩展)。

  4. 报价删除(参见报价删除)应始终最后执行。

在您的情况下,*匹配当前工作目录中的所有内容。您必须引用结果以获得预期的输出:

echo "$(cat /path/to/fileName)"
Run Code Online (Sandbox Code Playgroud)