为什么我的脚本在控制台输出中省略了前导空格?

Der*_*ler 10 bash

我有以下脚本:

#!/bin/bash
function consoleWriteLine() {
  echo $* >&2
}

consoleWriteLine "    indented by 4 spaces"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到以下输出:

$ ./test.sh
indented by 4 spaces
Run Code Online (Sandbox Code Playgroud)

我的4个空间去哪儿了?我如何让他们回来?

cha*_*aos 22

只需echo在您的函数中引用:

function consoleWriteLine() {
  echo "$*" >&2
}
Run Code Online (Sandbox Code Playgroud)

echo只是注意到通过空间和打印他们分开被分隔的多个参数的单一空间。看:

$ echo a b c
a b c
$ echo a b             c
a b c
$ echo "a b             c"
a b             c
Run Code Online (Sandbox Code Playgroud)

在最后一个示例中,字符串a b c一个单独的参数,并且是echoed。

  • 不仅可以在 `$*` 周围加上引号,变体 `$@` 是专门创建的,用于在引用时扩展为*单独的单词*:`"$@"` 可以是多个参数,`"$*"` 总是只有一个。`echo` 是少数几个没有区别的命令之一。 (4认同)