Me gustaría leer diferentes líneas de un archivo de texto a diferentes variables. Por ejemplo
input.txt:
line1 foo foobar bar
line2 bar
line3 foo
line4 foobar bar
Quiero que este resultado se almacena en las variables var1, var2, var3y var4de tal manera que
var1=line1 foo foobar bar
var2=line2 bar
y así.
¿Podría alguien decirme cómo se hace? Traté de usar evalen un bucle for. No parece funcionar.

grep,cut, et. Al.), es mucho mejor hacer lo que necesita hacer. No microgestión en un script de shell; orquestar herramientas para hacer el trabajo.Respuestas:
Tu harías:
O:
(menos eficiente ya
lineque rara vez está incorporado y la mayoría de los shells necesitan bifurcarse para implementar la sustitución de comandos.lineTampoco es un comando estándar).Para usar un bucle:
O para definir automáticamente los nombres de las variables como
line<++n>:Tenga en cuenta que
bashadmite variables de matriz y una funciónreadarrayintegrada para leer líneas en una matriz:Sin embargo , tenga en cuenta que, a diferencia de la mayoría de los otros shells, los
bashíndices de matriz comienzan en 0, no en 1 (heredado deksh), por lo que la primera línea estará en${line[0]}, no${line[1]}(aunque, como ha demostrado @Costas , puede hacerreadarray(también conocido comomapfile) comience a escribir los valores en el índice 1 (lasbashmatrices también son contrarias a que la mayoría de las otras capas sean matrices dispersas ) con-O 1).Ver también: ¿ Entender "IFS = read -r line"?
fuente
Ofrecería usar una matriz para tales tareas
así que tendrás cada línea adentro
${var[1]},${var[2]}y así sucesivamentefuente
Esto no es estrictamente lo que solicitó, pero podría funcionar para sus necesidades. Puede serializar los datos con Awk. Tenga en cuenta que esto se romperá si su $ 1 no es un nombre de variable válido:
Resultado:
fuente