How to set 4 space tab 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 use setterm to set this

setterm -regtabs 4

I put it in my .bash_profile but its not bash related specifically


tabs 4 results in the following tabstop positions. Which isn't quite what you asked for.

tab stop positions 4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *

You asked for this..

tab stop positions 5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,80
         1         2         3         4         5         6         7         8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *  *

Specifying tabs with a single number creates an implicit list that starts from 0.
To create an explicit list such as what you asked for. Provide a comma or space separated list of tab stop positions.
Like so: tabs 5,9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77

See man tabs and tabs -v for more details.


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.

Tags:

Bash

Space