あなたがするだろう:
unset -v line1 line2
{ IFS= read -r line1 && IFS= read -r line2; } < input.txt
または:
{ line1=$(line) && line2=$(line); } < input.txt
(lineめったにビルトインされておらず、ほとんどのシェルlineはコマンド置換を実装するためにforkする必要があるため、効率的ではありません。また、標準コマンドではなくなりました)。
ループを使用するには:
unset -v line1 line2 line3
for var in line1 line2 line3; do
IFS= read -r "$var" || break
done < input.txt
または、変数の名前を次のように自動的に定義しますline<++n>。
n=1; while IFS= read -r "line$n"; do
n=$((n + 1))
done < input.txt
bash配列変数と、readarray行を配列に読み込む組み込み関数をサポートしていることに注意してください。
readarray -t line < input.txt
注しかし逆他のほとんどのシェルに、というbash配列のインデックスは0ではない1から始まる(から継承されたksh)ので、最初の行はになり${line[0]}ません、${line[1]}けれども(@Costasが示されているように、あなたが作ることができますreadarray(別名mapfile)indiceで値を書き始めます1(bash他のほとんどのシェルがスパース配列であることにも反する配列)と-O 1)。
参照:「IFS = read -r line」を理解しますか?