2016-03-22 43 views
0

我是bash的新手,我試圖編寫一個bash腳本來保存用戶的多行輸入(帶有換行符的文本,某些代碼行等)。我需要允許換行符(當你按下「Enter」時),多行粘貼(當你粘貼幾行「Ctrl + V」)並設置一個新的密鑰而不是「Enter」來驗證時,發送輸入並繼續腳本的下一步。我試過read,但是你不能做多行。Bash:讀取/讀取數組多行輸入

echo "Enter content :" 
read content 

我發現readarray這裏(How to delete a character in bash read -d multiline input?),其允許以按「Enter」爲換行,但每個字分離由空間是陣列中的單獨的一個例子。我想只有線條分開。

echo "Enter package names, one per line: hit Ctrl-D on a blank line to stop" 
readarray -t pkgs 

你有什麼想法嗎?或者可能有完全不同的方式來做到這一點?感謝您的幫助。

回答

0

您可以將IFS設置爲換行符,以便只有換行符纔會分隔數組中的項目。

IFS=$'\n' readarray lines 

第一行讀會${lines[0]},第二${lines[1]}${#lines[@]}告訴你有多少行,最後一個將是${lines[${#lines[@]}-1]}

要循環訪問數組,您應該使用"${lines[@]}"而不是${lines[*]};後者會讓你回到單個單詞的循環。

+0

你好,謝謝你的回答。我不知道IFS。對於其他感興趣的人: 'echo「輸入軟件包名稱,每行一個:在空行上按Ctrl-D以停止」 IFS = $'\ n' readarray行 for line in $ {lines [* ]} do \t echo「$ line」>> result.txt done' – Lucien

+0

不要試圖在註釋中放入代碼塊;它運作不好。 :)另見我的編輯。 –