在Mac OSX上的bash分割線,我有一個包含該行的文件(測試案例)在bash,「爲;做回聲;完成」的空間
x xx xxx
xxx xx x
但是,當我執行命令
for i in `cat r.txt`; do echo "$i"; done
結果不
x xx xxx
xxx xx x
,因爲我想,而是
x
xx
xxx
xxx
xx
x
我該如何讓echo給我'x xx xxx'?
在Mac OSX上的bash分割線,我有一個包含該行的文件(測試案例)在bash,「爲;做回聲;完成」的空間
x xx xxx
xxx xx x
但是,當我執行命令
for i in `cat r.txt`; do echo "$i"; done
結果不
x xx xxx
xxx xx x
,因爲我想,而是
x
xx
xxx
xxx
xx
x
我該如何讓echo給我'x xx xxx'?
默認情況下,Bash for循環會在所有空白處分裂。所建議
IFS=$'\n'
for i in `cat r.txt`; do echo "$i"; done
unset IFS
也許指向OP使用'while read;做...;而不是
@Fredrik:也許,雖然這在每個迭代中運行一個單獨的子shell ... – 2012-01-01 18:45:12
完美。謝謝。我曾看過'while'方法,但我還遇到過其他問題,看起來比這個回聲問題更難克服。 – atheaos 2012-01-01 18:45:27
IFS="\n"
for i in `cat r.txt`; do echo "$i"; done
unset IFS
不起作用... – 2012-01-01 18:42:22
@OliCharlesworth偶然地,當我測試你的答案時,我不小心漏掉了$並輸入了Arenielle在這裏的內容。有效。 雖然現在當我運行它涉及更多的數據時,我發現顯然還有其他副作用。 – atheaos 2012-01-01 18:51:56
@atheaos:你確定嗎? ''\ n「'在Bash中與C中的不同。嘗試將'echo'語句改爲例如'echo「LINE:$ i」'看看究竟發生了什麼。 – 2012-01-01 18:57:27
要麼設置IFS
,或使用while
::可以通過設置IFS
變量重寫
while read theline; do echo "$theline"; done <thefile
應該指出的是,這將在一個單獨的子shell中運行每個迭代... – 2012-01-01 18:46:12
是的,確實如此。編輯。 – fge 2012-01-01 18:48:30
這不是我想到的效率。相反,我在考慮變量作用域的問題(變量不在循環的「內部」和「外部」之間共享)。 – 2012-01-01 18:50:18
AWK「GSUB(/ /, 「\ n」 個){打印} ' 或 sed's// \ n/g' – kenny 2012-01-01 18:41:21