Las respuestas que encontró en Stack Exchange son correctas y este tutorial es incorrecto. Puede experimentar solo o buscarlo en el estándar . Un desarmado IFS
es equivalente a establecerlo en el valor predeterminado de space-tab-newline, mientras que un vacío IFS
desactiva efectivamente la división del campo.
Puede consultar la página de Sven Mascheck en IFS sobre implementaciones históricas. A algunos shells históricos no les gustó unset IFS
, y una versión muy antigua de ksh lo trataba como un vacío, IFS
pero todos los shells modernos y la mayoría de los shells antiguos tratan un valor no establecido IFS
como el valor predeterminado.
No debe comenzar su secuencia de comandos a IFS=
menos que desee desactivar la división de campos (lo cual puede ser una decisión razonable, pero tenga en cuenta que todavía necesita poner comillas dobles alrededor de las sustituciones para evitar el engorde, a menos que también lo desactive set -f
). Para restablecer el valor predeterminado, use unset IFS
. Es discutible si esto es útil al comienzo de un script; Hay muchas otras cosas malas, como un error PATH
que la persona que llama puede hacer para que su guión salga mal.
Este tutorial también aconseja reiniciar PATH
. Esto suele ser un mal consejo. En la mayoría de los casos, no puede predecir cuál es la ruta de búsqueda correcta, pero el usuario lo sabe. ¿Cómo saber si contiene /usr/local/bin
o /home/bob/bin
contiene versiones de utilidades con corrección de errores en un antiguo Unix donde las que /usr/bin
están en buggy? ¿Realmente quieres incrustar toda la lógica para decidir si poner /usr/xpg6/bin
delante /bin
? ¿En qué posición quieres /usr/gnu/bin
? No restablezca la RUTA a menos que su script apunte a un sistema específico.
No he leído este tutorial, pero verifiqué una cosa: no te dice desde el principio que siempre pongas comillas dobles alrededor de sustituciones variables y sustituciones de comandos. Así que no creo que este tutorial sea bueno.
unset IFS
no restablece IFS a su valor predeterminado en bash aunque restablece la división de campos.unset IFS
no se restableceIFS
a su valor predeterminado, lo desarma. Pero un unsetIFS
tiene el mismo efectoIFS
que el valor predeterminado.