It look like set tabstop=4
in VIM, but I don't know how to set it in bash
for example:
echo -e "1234567890\t321\n1\t2\n123\t1"
current output:
1234567890 321
1 2
123 1
I want output like this:
1234567890 321
1 2
123 1
It can be shown in anywhere, just like cat somefile
or php -r 'echo "\t123";'
How can I set tab width in bash?
That's not a property of your shell (or php or cat). It's your terminal that manages the output.
Use the tabs
command to change the behavior:
$ tabs 4
$ echo -e "a\tb"
a b
$ tabs 12
$ echo -e "a\tb"
a b
(tabs
is specified in POSIX, and output above is "faked": it's still a tab character between the two letters.)
You can set either regular or irregular intervals using the tabs
utility. It will work whether you're doing your own output, using cat
to output a file that already includes tabs or using the output of a program you don't control.
However, if you're controlling your output it's preferable to use printf
instead of echo
and format strings instead of tabs.
$ 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
Unless you want someone else to be able to control the output of your program using the tabs
utility.
You can use setterm to set this
setterm -regtabs 4
I put it in my .bash_profile but its not bash related specifically