echo — 打印字符串

echo 命令可用于打印字符串。标准用法为 echo firstString secondString ...。此外,它还提供了一些额外的参数来格式化输出。

echo 的滥用

如果你发现自己即将在 ebuild 中使用 echo,请停下来重新考虑。它几乎总是没有必要的。

首先,对于在标准 Portage 脚本中打印消息,可以使用 einfoeerror 函数以及它们对应的函数 einfoneerrorn 等,它们与前者相同,但不会打印尾随换行符 (\n)。

所有形如 echo ${somevar} | grep substring 的用法,仅仅是为了检查 ${somevar} 变量的内容是否包含 substring,或者更常见的是 echo ${somevar} | command,都被认为是不推荐的,并且应该(在大多数情况下可以)避免:这样做毫无必要地涉及了一个额外的 shell 会话和一个管道。 “此处字符串” 部分描述了处理此类情况的首选方法。

此处字符串

使用“此处字符串”,你可以将环境变量的内容传递到应用程序的标准输入,使用 <<<word 重定向:实际发生的是 bash 展开 word 并将结果传递给标准输入。

一个常见的例子是验证变量 ${foo} 是否包含子字符串 bar,使用以下结构:grep bar <<< ${foo}。这取代了使用 echo ${foo} | grep bar 的已弃用且更浪费的方法。

echo 的标准用法

在标准调用中,没有额外选项的 echo 命令会将传递给它的参数输出到标准输出,参数之间用空格分隔,并在末尾添加一个换行符 (\n)。

如果想要排除尾随换行符,可以传递 -n 选项,例如:echo -n "no trailing newline"

特殊字符,如制表符 (\t)、换行符 (\n)、回车符 (\r)(例如,用于将 DOS 格式的换行符转换为 Unix 格式)以及任何其他由其代码值给出的 ASCII 字符,都可以使用 -e 选项传递给 echo 命令。例如,要在一行 echo 命令中输出三行字符串,每行一个,请使用:echo -e "first line\nsecond line\nthird line"

bash(1) 手册页中提供了其他转义序列和 echo 命令的额外参数。