Comment puis-je faire écho à un ou plusieurs tabulations à l'aide d'un script bash? Quand j'exécute ce code
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
j'ai compris
res=[ x] # that is [<space>x]
echo -e ' \t '
fera écho à «new tab space space» ( -e
signifie «permettre l'interprétation des échappements antislash»):
$ echo -e ' \t ' | hexdump -C
00000000 20 09 20 0a | . .|
echo -e
ne fonctionne pas à partir de Makefiles?echo -e
n'est pas POSIX et lesmake
appels/bin/sh
qui ne sont normalement pas utilisés de manière interactive par le programme et qui ne sont normalement pas-e
implémentés. Pour la portabilité, utilisezprintf '\t'
plutôt.man
page de laecho
commande ne mentionne pas l'option-e
. Cependant, cette option est acceptée.Utilisez
printf
pasecho
.Il existe plusieurs versions différentes de la
echo
commande. Il y en a/bin/echo
(qui peut être ou non la version GNU Coreutils, selon le système), et laecho
commande est intégrée dans la plupart des shells. Différentes versions ont différentes manières (ou aucune manière) de spécifier ou de désactiver les échappements pour les caractères de contrôle.printf
, d'autre part, a beaucoup moins de variation. Il peut exister en tant que commande, généralement/bin/printf
, et il est intégré à certains shells (bash et zsh l'ont, tcsh et ksh ne le font pas), mais les différentes versions sont beaucoup plus similaires les unes aux autres que les différentes versions deecho
. Et vous n'avez pas à vous souvenir des options de ligne de commande (à quelques exceptions près; GNU Coreutils printf accepte--version
et--help
, et le bash printf intégré accepte-v var
de stocker la sortie dans une variable).Pour votre exemple:
Et maintenant, il est temps pour moi d'admettre que
echo
cela fonctionnera aussi bien pour l'exemple dont vous parlez; il vous suffit de mettre des guillemets autour de l'argument:comme l'a écrit kmkaplan (il y a deux ans et demi, je viens de le remarquer!). Le problème avec vos commandes d'origine:
n'est pas avec
echo
; c'est que la coquille a remplacé la languette par un espace avant de laecho
voir.echo
est bien pour une sortie simple, commeecho hello world
, mais vous devez utiliserprintf
chaque fois que vous voulez faire quelque chose de plus complexe. Vous pouvez vous mettreecho
au travail, mais le code résultant est susceptible d'échouer lorsque vous l'exécutez avec uneecho
implémentation différente ou un shell différent.la source
Mettez votre chaîne entre guillemets doubles :
la source
Vous pouvez également essayer:
la source
vous devez utiliser le drapeau -e pour l'écho, vous pouvez
la source
Depuis la page de manuel de bash:
Vous pouvez donc faire ceci:
la source
Utilisez la combinaison de touches mot pour mot,
^V
(CTRL+V
,C-v
, peu importe ).Lorsque vous tapez
^V
dans le terminal (ou dans la plupart des éditeurs Unix), le caractère suivant est repris mot pour mot . Vous pouvez l'utiliser pour taper un caractère de tabulation littéral dans une chaîne que vous faites écho.Quelque chose comme les œuvres suivantes:
Bash docs ( qv , "quoted-insert")
note de côté: selon cela,
ALT+TAB
devrait faire la même chose, mais nous avons tous lié cette séquence à la commutation de fenêtre afin que nous ne puissions pas l'utiliser-
Remarque: vous pouvez utiliser cette stratégie avec toutes sortes de personnages inhabituels. Comme un retour chariot:
En effet, le retour chariot est ASCII 13 et M est la 13e lettre de l'alphabet, donc lorsque vous tapez
^M
, vous obtenez le 13e caractère ASCII. Vous pouvez le voir en action en utilisantls^M
, à une invite vide, qui insérera un retour chariot, provoquant l'invite à agir exactement comme vous appuyez sur retour. Lorsque ces caractères sont normalement interprétés, textuellement vous obtenez le caractère littéral.la source
grep
pour attraper des lignes contenant destab
caractères.L'utilisation de l'écho pour imprimer les valeurs des variables est un piège Bash courant. Lien de référence:
http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
la source
Si vous souhaitez utiliser
echo "a\tb"
dans un script, vous exécutez le script en tant que:Vous pouvez également donner à myscript.sh l'autorisation d'exécution, puis exécuter le script.
la source
la source