Si l'exemple suivant, qui définit la IFS
variable d'environnement sur un caractère de saut de ligne ...
IFS=$'\n'
- Que signifie exactement le signe dollar ?
- Que fait-il dans ce cas précis?
- Où puis-je en savoir plus sur cette utilisation spécifique (Google n'autorise pas les caractères spéciaux dans les recherches et je ne sais pas quoi chercher autrement)?
Je sais ce qu'est la IFS
variable d'environnement et quel est le \n
caractère (saut de ligne), mais pourquoi ne pas simplement utiliser le formulaire suivant:
IFS="\n"
(qui ne fonctionne pas)?
Par exemple, si je veux parcourir chaque ligne d'un fichier et que je veux utiliser une boucle for, je pourrais le faire:
for line in (< /path/to/file); do
echo "Line: $line"
done
Cependant, cela ne fonctionnera pas correctement à moins qu'il ne IFS
soit défini sur un caractère de saut de ligne. Pour que cela fonctionne, je devrais faire ceci:
OLDIFS=$IFS
IFS=$'\n'
for line in (< /path/to/file); do
echo "Line: $line"
done
IFS=$OLDIFS
Note: je n'ai pas besoin d'un autre moyen pour faire la même chose, j'en connais déjà beaucoup d'autres ... Je ne suis curieux que de ça $'\n'
et je me demande si quelqu'un pourrait me donner une explication à ce sujet.
\n
est juste une lettre n (échappée). Vous avez raison'\n'
et vous"\n"
êtes contrecarré suivi de n.$'\n'
est spécifique à bash - cela ne fonctionnera pas dans un shell POSIX (/bin/sh
). Pour obtenir le même effet d'une manière compatible POSIX, vous pouvez taperIFS='
, puis appuyer sur retour pour taper un caractère de nouvelle ligne réel, puis taper la fermeture'
IFS=$(echo -e '\n')
devrait également le faire d'une manière compatible POSIX.-e
n'est pas défini, et\n
sans-e
fonctionne comme une extension XSI: pubs.opengroup.org/onlinepubs/9699919799/utilities/… .printf '\n'
roches;)