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 set
intenta mostrar una variable que contiene caracteres invisibles. Entonces él \t
representa una tabulación y \n
representa 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.
set
utiliza 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 \t
está. 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 \t
y \n
se analizan en la entrada y se convierten a los códigos de caracteres reales. Entonces, la salida de echo $IFS
parece 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