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

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

我有以下脚本:

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

consoleWriteLine "    indented by 4 spaces"

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

$ ./test.sh
indented by 4 spaces

我的 4 个空间去哪了?我该如何找回它们?

答案1

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

function consoleWriteLine() {
  echo "$*" >&2
}

echo只是注意到多个参数被空格分隔,并将它们打印出来,分隔符为单身的空间。请参阅:

$ echo a b c
a b c
$ echo a b             c
a b c
$ echo "a b             c"
a b             c

在最后一个例子中,字符串a b c单一参数并echo保持原样。

答案2

我自己也遇到过这个问题,

按照本博客您需要更改 IFS,因为默认情况下它包含空格,因此将“xxx yyy zzzz”视为 3 个字符串,它们之间有空格。

IFS='\n'

在命令之前将修复它,并取消设置 IFS 以删除更改

unset IFS

相关内容