我有一个包含未来安装依赖项的文件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
,后者依次输出每个标记,并以单个空格分隔。
进一步阅读: