大括号扩展中不需要的空间

use*_*370 3 bash brace-expansion

我有以下括号扩展(bash shell):

echo -e {0..4..2}" "{0..2..2}"\n"
Run Code Online (Sandbox Code Playgroud)

我预计这会产生

0 0
0 2
2 0
2 2
4 0
4 2
Run Code Online (Sandbox Code Playgroud)

但是除了第一行之外,输出的每一行都有一个前导空格,最后还有一个我没想到的额外的空行。为什么是这样。有没有简单的方法来修复它?显然我可以做一些笨拙的事情,比如 pipe to sed 's/^ //',但是有没有更漂亮的方法而不用管道到额外的命令?

Kam*_*ski 18

echo打印由空格分隔的参数,即使它们包含(或生成)换行符。此外,它会在输出的末尾添加一个换行符(除非它是echo -n)。

使用printf

printf '%s\n' {0..4..2}" "{0..2..2}
Run Code Online (Sandbox Code Playgroud)

echo做什么意外,总是考虑printf。在你熟悉之后printf它甚至可能成为你的第一选择。

  • 即使当 `echo` *不* 做一些意想不到的事情时,考虑使用 `printf` 代替。如果根本不使用 `echo`,它就不会是不可预测的 :) (3认同)