L'écho des caractères de tabulation dans le script bash
Comment puis-je écho à l'une ou plusieurs des caractères de tabulation à l'aide d'un script bash?
Lorsque j'exécute ce code
res=' 'x # res = "\t\tx"
echo '['$res']' # expect [\t\tx]
- Je obtenir ce
res=[ x] # that is [<space>x]
Vous devez vous connecter pour publier un commentaire.
se fera l'écho de "l'espace de l'onglet de l'espace de saut de ligne' (
-e
signifie "permettre l'interprétation des antislashes'):echo -e
ne fonctionne pas de Makefile?echo -e
n'est pas POSIX etmake
appels/bin/sh
qui n'est pas normalement l'utilisation d'un programme d'utilisation de manière interactive, et, normalement, n'a pas-e
mis en œuvre. Pour la portabilité, l'utilisationprintf '\t'
à la place.man
page pour leecho
de commande ne fait pas mention de l'option-e
. Toutefois, cette option est acceptée.Utilisation
printf
, pasecho
.Il y a plusieurs versions différentes de la
echo
de commande. Il y a/bin/echo
(qui peut ou peut ne pas être la GNU Coreutils version, selon le système), et laecho
de commande est intégré dans la plupart des shells. Différentes versions ont des façons différentes (ou pas) afin de spécifier ou de désactiver échappe par des 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é dans certains shells (bash et zsh l'avoir, tcsh et ksh ne le font pas), mais les différentes versions sont beaucoup plus proches les uns des autres que les différentes versions deecho
sont. Et vous n'avez pas à mémoriser options de ligne de commande (avec quelques exceptions; GNU Coreutils printf accepte--version
et--help
, et le haut-bash printf accepte-v var
pour stocker le résultat dans une variable).Pour votre exemple:
Et maintenant il est temps pour moi d'admettre que
echo
fonctionnera tout aussi bien pour l'exemple que vous vous posez à propos de; vous avez juste besoin de mettre des guillemets doubles autour de l'argument:comme kmkaplan écrit (deux ans et demi, j'ai juste remarqué!). Le problème avec vos commandes d'origine:
n'est pas avec
echo
; c'est que le shell remplacé l'onglet avec un espace avantecho
jamais vu.echo
est très bien pour une simple sortie, commeecho hello world
, mais vous devez utiliserprintf
chaque fois que vous voulez faire quelque chose de plus complexe. Vous peut obtenirecho
à travailler, mais le code résultant est susceptible d'échouer lorsque vous l'exécutez avec un autreecho
mise en œuvre ou d'un autre shell.Mettre votre chaîne entre double citations:
Vous pouvez également essayer:
vous devez utiliser l'option-e pour l'écho, alors vous pouvez
À partir de la page de manuel de bash:
De sorte que vous pouvez le faire:
Avec echo pour imprimer les valeurs de variables est une commune Bash piège.
Lien de référence:
http://mywiki.wooledge.org/BashPitfalls#echo_.24foo
Utiliser le verbatim de frappe,
^V
(CTRL+V
,C-v
, quelle que soit).Lorsque vous tapez
^V
dans le terminal (ou dans la plupart des Unix éditeurs), le caractère suivant est pris verbatim. Vous pouvez utiliser ce type de littéral caractère de tabulation à l'intérieur d'une chaîne de caractères, vous êtes en écho.Quelque chose comme les ouvrages suivants:
Bash docs (voir, "cité-insert")
note de côté: d'après cela,
ALT+TAB
devrait faire la même chose, mais nous avons tous tenu que la séquence de la fenêtre de commutation de sorte que nous ne pouvons pas l'utiliser--
Remarque: vous pouvez utiliser cette stratégie avec toutes sortes de personnages insolites. Comme un retour chariot:
C'est parce que le transport de retour est l'ASCII 13, et M est la 13ème lettre de l'alphabet, de sorte que lorsque vous tapez
^M
, vous obtenez le 13 caractères ASCII. Vous pouvez le voir en action à l'aide dels^M
, à un vide de commandes, qui va insérer un retour chariot, provoquant l'invite à agir comme vous appuyez sur return. Lorsque ces caractères sont normalement interprété, verbatim vous permet de vous obtenir le caractère littéral.grep
pour attraper les lignes contenanttab
caractères.Si vous souhaitez utiliser
echo "a\tb"
dans un script, vous exécutez le script comme:Alternativement, vous pouvez donner à myscript.sh l'autorisation de l'exécution, puis exécutez le script.