2016-03-22 4 views
0

私はbashで新しく、ユーザのマルチライン入力(改行、ある種のコード行などのテキスト)を保存するbashスクリプトを作成しようとしています。改行(「Enter」を押すと)、複数行の貼り付け(「Ctrl + V」の行を貼り付ける)、「Enter」ではなく新しいキーを設定して入力を送信し、スクリプトの次のステップ。Bash:read/readarray multiline input

私はreadで試しましたが、複数行はできません。

echo "Enter content :" 
read content 

私は改行を押して「入力」することができますが、各単語はスペースで区切る配列で分離されて、ここで readarrayHow to delete a character in bash read -d multiline input?)との例を見つけました。私は線だけを分離したいと思っています。

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[*]}を使用する必要があります。後者はあなたを個々の言葉のループに戻します。

+0

こんにちは、この回答に感謝します。私はIFSについて知らなかった。興味がある他の人向け: 'echo"パッケージ名を1行に1つ入力してください。空白行でCtrl-Dを押すと、 " IFS = $ '\ n' readarray lines $ {lines [ ]} do \t echo "$ line" >> result.txt done' – Lucien

+0

コメントにコードブロックを入れないでください。旨く動きません。 :)また私の編集を参照してください。 –