内联 for 循环命令中的空格作为换行符

内联 for 循环命令中的空格作为换行符

有人愿意启发我为什么第一个命令中的空格似乎被解释为换行符?也会发生用 print 代替 echo 的情况。

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
2011年9月16日
09:20
2011年9月19日
18.41
2011年9月21日
07:15
$find *.txt -exec head -1 {} \;
9.16.11 09:20
9.19.11 18.41
9.21.11 07:15

答案1

您的命令替换会根据 IFS 对其输出进行分词。具体来说,在这种情况下,它是在空间上分裂的。不解析 的输出find。相反,请执行以下操作:

for file in *.txt; do
    head -1 "${file}"
done

Wooledge wiki 也有一些关于这个问题的好信息这里

答案2

查看 shell 的手册页,专门查看 IFS 全局变量。

具体来说,这样做:

IFS=$(echo -en "\t\n\0")

相关内容