2

「IFS=$'\n' に問題があります。

old_IFS=$IFS
file="Good morning
Good morning
Good morning
Good morning
Good morning"

IFS=$'\n'
for line in $file
    do
       echo $line
done
IFS=$old_IFS

スクリプトを実行すると:

Good mor
i
g
Good mor
i
g
Good mor
i
g
Good mor
i
g
Good mor
i
g

「ン」が削除されます。ファイルを1行ずつ表示したい

4

2 に答える 2

2

複数行のデータを反復する適切な方法 (シェルが をサポートしているかどうかに関係なく$'...') は、繰り返しwhile呼び出すループを使用することです。read

while read -r; do
    echo "$REPLY"
done <<EOF
$file
EOF
于 2014-05-27T15:28:43.563 に答える
1

他の人が指摘しているように、使用しているシェルは$'...'構文をサポートしていないと思います。

システムで Dash as を使用している場合、空の変数または割り当てられていない変数に割り当てることで、新しい行にsh割り当てることができるはずです。IFSたとえば、n=""; IFS=$n改行で分割できます。これはハックであり、空の変数がインタープリターに対して新しい行として解釈されるためにのみ機能します。

を使用して、Bash などのシェルでヒア文字列から読み取ることもできます<<<word

file="Good morning
Good morning
Good morning
Good morning
Good morning"

while read line; do
    echo $line
done <<<"$file"

それ以外の場合は、ファイルから行ごとに読み取ることができます。

while read -r line; do 
    echo "$line"
done < file
于 2014-05-26T15:32:46.353 に答える