GNU/Linux >> Tutoriales Linux >  >> Linux

¿Entendiendo si?

Los siguientes subprocesos en este sitio y StackOverflow fueron útiles para comprender cómo IFS funciona:

  • ¿Qué es IFS en el contexto del bucle for?
  • Cómo recorrer las líneas de un archivo
  • Bash, leer línea por línea del archivo, con IFS

Pero todavía tengo algunas preguntas cortas. Decidí preguntarles en la misma publicación ya que creo que puede ayudar mejor a futuros lectores:

P1. IFS normalmente se analiza en el contexto de la "división de campos". Es división de campo lo mismo que división de palabras ?

P2: La especificación POSIX dice:

Si el valor de IFS es nulo, no se realizará división de campos.

Está configurando IFS= lo mismo que establecer IFS a nulo? ¿Es esto lo que significa establecerlo en una empty string? ¿también?

P3: En la especificación POSIX, leo lo siguiente:

Si IFS no está configurado, el shell se comportará como si el valor de IFS fuera
<space>, <tab> and <newline>

Digamos que quiero restaurar el valor predeterminado de IFS . ¿Cómo puedo hacer eso? (más específicamente, ¿cómo me refiero a <tab> y <newline> ?)

P4: Finalmente, ¿cómo sería este código:

while IFS= read -r line
do    
    echo $line
done < /path_to_text_file

se comportan si cambiamos la primera línea a

while read -r line # Use the default IFS value

o a:

while IFS=' ' read -r line

Respuesta aceptada:

  1. Sí, son iguales.
  2. Sí.
  3. En bash y shells similares, podría hacer algo como IFS=$' tn' . De lo contrario, podría insertar los códigos de control literal usando [space] CTRL+V [tab] CTRL+V [enter] . Sin embargo, si planea hacer esto, es mejor usar otra variable para almacenar temporalmente el antiguo IFS valor, y luego restaurarlo después (o anularlo temporalmente para un comando usando el comando var=foo command sintaxis).
    • El primer fragmento de código colocará la línea completa leída, palabra por palabra, en $line , ya que no hay separadores de campo para realizar la división de palabras. Sin embargo, tenga en cuenta que dado que muchos shells usan cstrings para almacenar cadenas, la primera instancia de un NUL aún puede causar la apariencia de que finaliza prematuramente.
    • Es posible que el segundo fragmento de código no coloque una copia exacta de la entrada en $line . Por ejemplo, si hay varios separadores de campo consecutivos, se convertirán en una única instancia del primer elemento. Esto a menudo se reconoce como pérdida de espacios en blanco circundantes.
    • El tercer fragmento de código hará lo mismo que el segundo, excepto que solo se dividirá en un espacio (no el espacio habitual, la pestaña o la nueva línea).
Relacionado:¿Comprender "IFS =leer -r línea"?
Linux
  1. Comprender systemd al inicio en Linux

  2. ¿Entendiendo "ifs=Read -r Line"?

  3. ¿Cómo leer una dirección IP al revés?

  4. ¿Entender el escritorio de Linux?

  5. Comprender los privilegios de MySQL

Ansible vs Kubernetes:comprensión de las diferencias

Comprender los permisos de archivos de Linux

Comando de lectura Bash

Cómo leer un archivo línea por línea en Bash

Leer correo de usuario

Comprender los procesos en Linux