Bash:如何在一行的开头避免空白?

use*_*own 5 linux bash

在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
Run Code Online (Sandbox Code Playgroud)

第2行的输出......以空白开头.这是为什么?它从何而来?我怎么能避免呢?

我知道如何用sed或其他东西摆脱它,但我宁愿首先避免它.

我只提到它,和{..}一起使用 - 语法.还有其他相似的案例吗?

更新:

一个有用的解决方法是,使用退格键删除第一个字母:

echo -e "\ba b "{1..3}" d e\n"
Run Code Online (Sandbox Code Playgroud)

或者,正如Jared Ng所说:

echo -e "\ra b "{1..3}" d e\n"
Run Code Online (Sandbox Code Playgroud)

更新2:

我们摆脱了领先的新行:

echo -e "\na b "{1..4}" d e" | sed '1d'
echo -e "\na b "{1..4}" d e" | tail -n +2
Run Code Online (Sandbox Code Playgroud)

或尾随:

echo -e "\ba b "{1..3}" d e\n" | sed '$d'
echo -e "\ba b "{1..3}" d e\n" | head -n 3
Run Code Online (Sandbox Code Playgroud)

Jar*_* Ng 6

echo -e "\ra b "{1..3}" d e\n"
Run Code Online (Sandbox Code Playgroud)

修复它给我.输出:

a b 1 d e
a b 2 d e
a b 3 d e
Run Code Online (Sandbox Code Playgroud)

(\r是回车 - 它将插入符号带回到行的开头,防止空间)

为什么bash这样做?跑echo "abc"{1..3}.你会看到bash输出:abc1 abc2 abc3.注意两者之间的空格?{1..3}扩展表达式,由空格分隔.当您使用换行符时echo "abc"{1..3}"\n",bash会保留这些空格,并根据请求添加换行符.这些都是输出中出现的内容.

  • 在这里,这可以说明为什么bash有这种奇怪之处.运行`echo"abc"{1..3}`.你会看到bash输出:`abc1 abc2 abc3`.注意两者之间的空格?当你使用换行符`echo"abc"{1..3}"\n"时,bash保留这些空格并简单地按要求添加换行符.这些都是输出中出现的内容. (3认同)