有人愿意启发我为什么第一个命令中的空格似乎被解释为换行符?也会发生用 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")