Linux Bash Shell lu avec prise en charge des onglets (\ t)
Il existe une \toption pour l'onglet horizontal dansecho
wolf@linux:~$ echo hello hello wolf@linux:~$
wolf@linux:~$ echo -e '\thello' hello wolf@linux:~$
Existe-t-il une option similaire read?
wolf@linux:~$ read -p 'hello ' hello wolf wolf@linux:~$
wolf@linux:~$ read -p '\thello ' \thello wolf wolf@linux:~$
Sortie désirée
wolf@linux:~$ read -p '\thello ' <- need something to produce something like tab or `\t` in `echo` hello wolf wolf@linux:~$
Réponses
Vous pouvez toujours utiliser la $'...'forme de guillemets de style ksh93 qui comprend ces séquences d'échappement:
IFS= read -r -p $'\thello ' var
(les IFS=et -rne sont pas pertinents, je les ajoute simplement ici car appeler readsans eux a rarement du sens).
Notez que ce -pn'est pas une shfonction standard . Dans ksh / zsh, -pest de lire à partir du co-processus et les invites sont spécifiées avec read 'var?Prompt: '. C'est dommage que vous ayez bashchoisi d'introduire ici une API incompatible. Vous n'êtes pas obligé d'utiliser -p, vous pouvez simplement le faire de manière portative:
printf >&2 '\thello '
IFS= read -r var
printfreconnaît ces séquences d'échappement dans son argument de format et les arguments des %bspécificateurs. Le fait de les echoreconnaître (ou d'accepter une -eoption pour les reconnaître) dépend de l'implémentation et pour de nombreuses implémentations (y compris celles bashintégrées) du temps de construction et des paramètres d'exécution, il est donc préférable d'éviter .
Vous pouvez toujours simplement ajouter 8 espaces:
read -p ' hello '
Mais oui, vous pouvez également obtenir un caractère de tabulation réel:
read -p $'\t''hello '
Ou
read -p "$(echo -e '\thello ')"
Ou
read -p "$(printf '\thello ')"