如何在字符串中的bash变量后避免空格?

Mat*_*ock 26 shell bash variable-substitution

我有一个颜色变量。我用它来为字符串设置颜色,方法是在字符串内部对其进行评估。但是,我需要在名称后包含空格(以便名称不包含部分文本)。这有时看起来很糟糕。

我怎样才能避免使用(打印)这个空间?

示例(让我们说Red=1NC=2):

echo -e "$Red Note: blabla$NC".
Run Code Online (Sandbox Code Playgroud)

输出:

1 Note: blabla2.
Run Code Online (Sandbox Code Playgroud)

预期输出:

1Note: blabla2.
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 40

只需将变量括在大括号中:

echo -e "${Red}Note: blabla${NC}".
Run Code Online (Sandbox Code Playgroud)

查看有关参数扩展的更多详细信息。

另见很好的答案为什么 printf 比 echo 好?如果你关心便携性。


小智 7

你应该养成使用 printf 的习惯:

printf '%sNote: blabla%s\n' "$Red" "$NC"
Run Code Online (Sandbox Code Playgroud)

其中每个%s替换一个变量。并且-e不需要,因为 printf 以可移植的方式接受反斜杠值 \n、\t 等。

请记住,echo -e它不可移植到其他 shell。

其他选项:

您可以使用两个命令来连接它们的输出:

echo -ne "$Red"; echo -e "Note: blabla$NC"
Run Code Online (Sandbox Code Playgroud)

您可以使用简单的字符串连接:

echo -e "$Red""Note: blabla$NC"
Run Code Online (Sandbox Code Playgroud)

或者您可以使用{ }以避免名称文本混淆:

echo -e "${Red}Note: blabla$NC"
Run Code Online (Sandbox Code Playgroud)