web-dev-qa-db-fra.com

Comment définir 4 espace tab dans bash

Cela ressemble à set tabstop=4 dans VIM, mais je ne sais pas comment le définir dans bash

par exemple:

echo -e "1234567890\t321\n1\t2\n123\t1"

sortie actuelle:

1234567890      321
1       2
123     1

Je veux une sortie comme ça:

1234567890  321
1   2
123 1

Il peut être affiché n'importe où, comme cat somefile ou php -r 'echo "\t123";'

Comment puis-je définir la largeur de l'onglet dans bash?

20
Zheng Kai

Ce n'est pas une propriété de votre shell (ou php ou chat). C'est votre terminal qui gère la sortie.

Utilisez la commande tabs pour modifier le comportement:

$ tabs 4

$ echo -e "a\tb"      
a   b
$ tabs 12

$ echo -e "a\tb" 
a           b

(tabs est spécifié dans POSIX et la sortie ci-dessus est "falsifiée": c'est toujours un caractère de tabulation entre les deux lettres.)

49
Mat

Vous pouvez définir des intervalles réguliers ou irréguliers à l'aide de l'utilitaire tabs. Cela fonctionnera que vous fassiez votre propre sortie, en utilisant cat pour générer un fichier qui contient déjà des onglets ou en utilisant la sortie d'un programme que vous ne contrôlez pas.

Toutefois, si vous contrôlez votre sortie, il est préférable d'utiliser printf au lieu de echo et de formater des chaînes au lieu de tabulations.

$ printf '%-12s%8.4f %-8s%6.2f\n' 'Some text' 23.456 'abc def' 11.22
Some text    23.4560 abc def  11.22
$ format='%*s%*.*f %*s%*.*f\n'
$ printf "$format" -12 'Some text' 8 4 23.456 -8 'abc def' 6 2 11.22
Some text    23.4560 abc def  11.22

Sauf si vous souhaitez que quelqu'un d'autre puisse contrôler la sortie de votre programme à l'aide de l'utilitaire tabs.

1

Vous pouvez utiliser setterm pour régler ceci

setterm -regtabs 4

Je le mets dans mon .bash_profile mais ce n'est pas bash lié spécifiquement

0
carpii