Mise à jour : Debian 11.1
$ type read
read est une primitive du shell
$ read --help
$ man read
$ read
Entrée depuis le clavier
$ echo $REPLY
Entrée depuis le clavier
$ read line
Entrée depuis le clavier
$ echo line
Entrée depuis le clavier
$ read var1 var2 var3
un deux trois quatre
$ echo -e "$var1 \n$var2 \n$var3"
un
deux
trois quatre
$ echo -n "$IFS" |hexdump -C
00000000 20 09 0a | ..|
A noter que les espaces consécutifs sont traités comme un séparateur unique et que les tabulations sont traitées comme des espaces
$ read line
un deux trois quatre
$ echo $line
un deux trois quatre
Il est possible de redéfinir les séparateurs, par exemple, lire une entrée en utilisant le séparateur virgule ","
$ IFS="," read var1 var2
Première colonne,Deuxième colonne
$ echo $var1
Première colonne
$ echo $var2
Deuxième colonne
$ IFS="," read line
colonne1 colonne2
$ echo $line
colonne1 colonne2
$ IFS="," read var1 var2 var3
colonne1,colonne2,,colonne3
$ echo $var1
colonne1
$ echo $var2
colonne2
$ echo $var3
,colonne3
$ IFS="" read line
un deux \ trois
$ echo $line
un deux trois
Recopie intégrale d'une ligne y compris les backslashs (\) : option -r
$ IFS="" read -r line
Recopie intégrale avec espaces tabulations et backslashs \\\\
$ echo $line
Recopie intégrale avec espaces tabulations et backslashs \\\\
Redéfinition du séparateur à la valeur standard
$ IFS=$' \t\n'
$ read </etc/fstab
$ echo $REPLY
# /etc/fstab: static file system information.
$ while read line;do echo "$line";done</etc/fstab
# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
.......
$ while IFS="" read -r line; do printf "%s\n" $line; done</etc/fstab
Lire une entrée en utilisant readline (action curseur, ...)
$ read -e
Entrée depuis le clavier avec utilisation possible des touches et raccourcis de de navigation
$ echo $REPLY
Entrée depuis le clavier avec utilisation possible des touches et raccourcis de de navigation
Afficher un prompt (message) avant la saisie
$ read -p "Entrer un valeur : "
Entrer un valeur : qsdfqsdfqsdfqsdf
$ echo $REPLY
qsdfqsdfqsdfqsdf
Afficher une valeur par défaut et la prendre en compte si l'utilisateur ne rentre aucune valeur. Modifier la valeur affichée si elle ne convient pas.
$ read -ei "Si le texte vous convient l'accepter, sinon le modifier"
Si le texte vous convient l'accepter, sinon le modifier
$echo $REPLY
Si le texte vous convient l'accepter, sinon le modifier
Lire n caractères maxi et interrompre la saisie
$ read -n 20
Pas plus de 20 carac