Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bash: How to avoid blank at the beginning of a line?

Tags:

linux

bash

Given such a command in bash:

echo -e "a b "{1..3}" d e\n"
a b 1 d e
 a b 2 d e
 a b 3 d e

the output of line 2... starts with a blank. Why is that? Where does it come from? How can I avoid it?

I do know how to get rid of it with sed or something else, but I would prefer to avoid it in the first place.

I've only mentioned it, together with {..}-Syntax. Are there other, similar cases, without it?

update:

A useful workaround is, to remove the first letter with backspace:

echo -e "\ba b "{1..3}" d e\n"

or, as Jared Ng suggests:

echo -e "\ra b "{1..3}" d e\n"

update 2:

We get rid of leading newlines with:

echo -e "\na b "{1..4}" d e" | sed '1d'
echo -e "\na b "{1..4}" d e" | tail -n +2

or trailing:

echo -e "\ba b "{1..3}" d e\n" | sed '$d'
echo -e "\ba b "{1..3}" d e\n" | head -n 3
like image 235
user unknown Avatar asked Aug 15 '11 16:08

user unknown


2 Answers

echo -e "\ra b "{1..3}" d e\n"

Fixes it for me. Output:

a b 1 d e
a b 2 d e
a b 3 d e

(\r is the carriage return -- it brings the caret back to the beginning of the line, preventing the space)

Why does bash do this? Run echo "abc"{1..3}. You'll see that bash outputs: abc1 abc2 abc3. Notice the spaces in between? {1..3} expands the expression, delimited by spaces. When you use a newline, as in echo "abc"{1..3}"\n", bash keeps those spaces and simply adds a newline as requested. Those are what show up in the output.

like image 184
Jared Ng Avatar answered Oct 06 '22 01:10

Jared Ng


The {...} expands to a sequence of space-delimited alternatives, so you have in effect

echo "a b "1" d e\n" "a b "2" d e\n" "a b "3" d e\n"

The spaces after \n are the spaces you're seeing in the output.

You can try to move \n to the beginning of your string, like in

echo -e "\na b "{1..3}" d e"

Update

Another method (untested, sorry)

 printf "%s\n" "a b "{1..3}" d e"
like image 35
n. 1.8e9-where's-my-share m. Avatar answered Oct 05 '22 23:10

n. 1.8e9-where's-my-share m.