2011-12-22 7 views
3

を「読み取り」改行やbashの末尾:が、この作品は、bashでは、組み込み

echo -n $'a\nb\nc\n' | while read x; do echo = $x =; done 

しばらくは三回

= a = 
= b = 
= c = 

をループしかし、従来のを持っていないテキストファイルを想像します末尾の改行。私はreadはまだ3行すべてで動作するはずだと思いますが、そうではありません。私は得る:

echo -n $'a\nb\nc' | while read x; do echo = $x =; done 

= a = 
= b = 

bashでhelp readが本当に明らかにしません。

注:これは解決する必要はありません。私はそれを自分で修正する方法がいくつかあります。私は不思議で、バグ報告を提出したいと思っています。私は一般的に、新しい行の末尾にないファイルを尊重するよう努めています。 -dオプションを使って読むとき、私はこれを見つけました。 read -d " "は、改行の代わりにスペースで分割されますが、末尾のスペースがない限り、最後のエントリでは欠落します。

(UbuntuのGNUのbashのは、バージョン4.1.5(1)-release。)

+0

あなたの2番目のスクリプトは、kshで最初のスクリプトとして動作します。がんばろう。 – shellter

答えて

1
$ man bash 
    read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...] 
      One line is read from the standard input, ... 

私は鍵があると思う:How to define "One line"
text without a '\n' at the endOne lineになりますか?
私はreadそうは思わないと思います。

+1

私のテキストエディタはそれが行だと思っており、私はすべてのテキストエディタがそうだと思います。ですから、テキストエディタが最後の文字として改行を持たないファイルを分かりやすく扱うことができれば、 'read'もそうでしょう:-) –

関連する問題