如何在 bash 中“未触及”回显带有多个空格的字符串?

如何在 bash 中“未触及”回显带有多个空格的字符串?

我分配了一个这样的变量:

MYCUSTOMTAB='     '

但在 echo 中使用它:

echo $MYCUSTOMTAB"blah blah"

或者

echo -e $MYCUSTOMTAB"blah blah"

只是返回一个单一空间以及字符串的其余部分:

 blah blah

如何不加修改地打印完整字符串?我想用它来进行自定义缩进,因为\t它太宽了,不适合我的口味。

答案1

将变量放在双引号内以防止场分裂, 哪个您的空间:

$ MYCUSTOMTAB='     '
$ echo "${MYCUSTOMTAB}blah blah"
     blah blah

答案2

正如建议的这个答案引用变量就足够了。

在您的情况下需要引用的原因是因为如果没有它,bash 会将 split+glob 运算符应用于$MYCUSTOMTAB.默认值$IFS包含 TAB 字符,因此echo -e $MYCUSTOMTAB"blah blah",中$MYCUSTOMTAB只是被拆分为任何内容,因此它变得与您编写的内容相同:

echo -e "blah blah"

(顺便说一句,你可能不想要-e这里)。

您还可以使用printf代替echo

printf '%s\n' "$MYCUSTOMTAB"

printf '%s\n' "${MYCUSTOMTAB}blah blah"

或者,如果您想做printf同样类型的\n,\t扩展echo -e,请使用%b而不是%s

printf '%b\n' "${MYCUSTOMTAB}blah blah"

供参考阅读为什么 printf 比 echo 更好?

答案3

我认为你只需要为你的变量使用双引号

echo -e "$MYCUSTOMTAB"."blah blah"

答案4

我知道你的问题已被标记bash,但无论如何,为了最大的可移植性和可靠性,我会使用:

printf "%sblah blah\n" "$MYCUSTOMTAB" 

或者

someString="blah blah"
printf "%s%s\n" "$MYCUSTOMTAB" "$someString"

相关内容