使用双引号分割单词 vs 使用引号分割单词

使用双引号分割单词 vs 使用引号分割单词

我有一个包含未来安装依赖项的文件requirements.txt。该文件每行只有一个名称:

$cat requirements.txt 
pandas
numpy
...

我的实际代码的某些部分如下所示:

packages=$(cat "requirements.txt") || exit

当我这样做echo $packages而不是时"$packages",我得到以下结果

echo $packages
pandas numpy ...

对比

echo "$packages"
pandas
numpy
...

我很难理解拆分实际上是如何发生的。对我来说,不带引号的版本似乎不会拆分字符串,而双引号会做一些奇怪的事情并逐行打印结果,即使它们应该阻止拆分(也就是说,我预计结果是一行)。我是否遗漏了一些显而易见的东西?

答案1

该变量packages包含多行,以换行符分隔 - 当您回显引用的扩展时,这就是您所看到的,因为整个多行字符串作为单个参数传递给命令echo

当你回应未引用扩展,它会受到分词的影响(以及全局扩展 - 尽管这与此无关,因为您的输入不包含任何全局字符)。分词基于变量的值IFS,默认情况下,变量的值由空格、制表符组成和换行符. 每个IFS以 分隔的标记都作为单独的参数传递给echo,后者依次输出每个标记,并以单个空格分隔。

进一步阅读:

相关内容