variable IFS en Linux

variable IFS en Linux

Estimados: ¿Alguna idea de por qué veo un valor en blanco para la variable IFS?

bash-4.2$ set | grep -i ifs
IFS=$' \t\n'

bash-4.2$ echo $IFS

bash-4.2$
bash-4.2$

Respuesta1

Estás viendo un valor en blanco porqueeso es lo queessiempre almacenado en IFS: contiene un espacio (invisible), una pestaña (también invisible) y un avance de línea (también invisible).

No contiene signo de dólar, ni barras invertidas, ni letras: así es simplemente como setintenta mostrar una variable que contiene caracteres invisibles. Entonces él \trepresenta una tabulación y \nrepresenta un salto de línea, y el entorno $'...'indica que las combinaciones de barra invertida deben interpretarse como caracteres especiales y no como texto literal.

setutiliza este formato específico porque también se puede daratrásal shell como parte de algún otro comando. Por ejemplo, ejecutar echo $'Hello\tworld!imprimiría una pestaña donde \testá. Y en realidadcorrer IFS=$' \t\n'ya que un comando establecería la variable IFS en espacio + tabulación + salto de línea.

Respuesta2

Porque los \ty \nse analizan en la entrada y se convierten a los códigos de caracteres reales. Entonces, la salida de echo $IFSparece espacios (y algunos se eliminan mediante el análisis de argumentos ya que no los citaste). Si desea ver el contenido real, conviértalo a hexadecimal y no olvide citar para evitar que se analicen los caracteres:

IFS=$' \t\n'
printf '%s' "$IFS" | hd
00000000  20 09 0a                                          | ..|
00000003
0

información relacionada