2013-08-30 33 views
1

我手邊沒有linux,而是使用compileonline.com檢查bash中的一些代碼,但我是bash的新手。有人可以舉手嗎?什麼輸出將回聲>產生?

for var 
do echo $var > fniz 
    cat fniz 
done 

參數是123 ABC XYZ

我的猜測是,輸出將是:

123 
123 
abc 
123 
abc 
xyz 

但我不知道,回聲是$ var是否> fniz覆蓋fniz或寫入新的一行。它會覆蓋文件嗎?

+0

請檢查有關重定向手動覆蓋文件:https://www.gnu.org/software/bash/manual /html_node/Redirections.html – konsolebox

+1

>重定向。 >>追加。 – dcaswell

+1

請注意''bash'有一個'noclobber'選項,如果設置了這個選項,它會阻止你覆蓋現有的文件(即第二個和更多的'echo's會失敗),在這種情況下你將不得不使用'>!' –

回答

4

>總是被覆蓋。

通過使用「附加」重定向操作符>>可以實現新的寫入。

+0

'''不總是*覆蓋,即如果'set -o noclobber'有效。然後它會拒絕打開現有文件。 – hyde

+2

@hyde:我接受你的評論,但保持我的答案適合於OP的bash級別。 –

+1

好吧,我會避免在不準確的時候使用「always」這個詞,因爲這樣的強大陳述可能會陷入內存的讀者誰不瞭解更好,特別是如果這是一個upvoted的答案。我會說它像「總是試圖覆蓋」或「總是覆蓋(或嘗試失敗)」或我會添加一個腳註與更多的細節。 – hyde

2

它每次

$ cat script.sh 
for var in 123 abv xyz 
do 
    echo $var > fniz 
    cat fniz 
done 
$ ./script.sh 
123 
abv 
xyz 

如果要追加,使用>>

+0

沒有。正如你寫的那樣,輸出結果只會是「xyz」,因爲你每次都在打斷文件。 – Emmet

+1

@Emmet真的。但請注意,我們在循環中調用'cat fniz',因此它會打印所有三個值。執行後的文件內容確實是'xyz' – user000001

+0

啊,對。我誤解了你的例子的意圖。我的錯。 – Emmet

相關問題