Echo tab characters in bash script

Echo tab characters in bash script

Echo tab characters in bash script

echo -e  t 

will echo space tab space newline (-e means enable interpretation of backslash escapes):

$ echo -e  t  | hexdump -C
00000000  20 09 20 0a                                       | . .|

Use printf, not echo.

There are multiple different versions of the echo command. Theres /bin/echo (which may or may not be the GNU Coreutils version, depending on the system), and the echo command is built into most shells. Different versions have different ways (or no way) to specify or disable escapes for control characters.

printf, on the other hand, has much less variation. It can exist as a command, typically /bin/printf, and its built into some shells (bash and zsh have it, tcsh and ksh dont), but the various versions are much more similar to each other than the different versions of echo are. And you dont have to remember command-line options (with a few exceptions; GNU Coreutils printf accepts --version and --help, and the built-in bash printf accepts -v var to store the output in a variable).

For your example:

res=           x # res = ttx
printf %sn [$res]

And now its time for me to admit that echo will work just as well for the example youre asking about; you just need to put double quotes around the argument:

echo [$res]

as kmkaplan wrote (two and a half years ago, I just noticed!). The problem with your original commands:

res=           x # res = ttx
echo [$res] # expect [ttx]

isnt with echo; its that the shell replaced the tab with a space before echo ever saw it.

echo is fine for simple output, like echo hello world, but you should use printf whenever you want to do something more complex. You can get echo to work, but the resulting code is likely to fail when you run it with a different echo implementation or a different shell.

Echo tab characters in bash script

You can also try:

echo Hello$tworld.

Related posts on Bash Script  :

Leave a Reply

Your email address will not be published.