Bash

空格作為內聯 for 循環命令的換行符

  • December 5, 2015

有人願意告訴我為什麼第一個命令中的空格似乎被解釋為換行符?也會出現用 print 代替 echo。

$for l in $( find *.txt -exec head -1 {} \; ); echo $l;
9.16.11
09:20
9.19.11
18.41
9.21.11
07:15
$find *.txt -exec head -1 {} \;
9.16.11 09:20
9.19.11 18.41
9.21.11 07:15

查看專門查看 IFS 全域變數的 shell 的手冊頁。

具體來說,這樣做:

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

根據 IFS,您的命令替換會在其輸出上引起分詞。具體來說,在這種情況下,它是按空格分割的。不要解析find. 相反,請執行以下操作:

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

Wooledge wiki 也有關於這個問題的一些很好的資訊

引用自:https://unix.stackexchange.com/questions/22319