echo
— 打印字符串
echo
命令可用于打印字符串。标准用法为 echo firstString secondString ...
。此外,它还提供了一些额外的参数来格式化输出。
echo
的滥用
如果你发现自己即将在 ebuild 中使用 echo
,请停下来重新考虑。它几乎总是没有必要的。
首先,对于在标准 Portage 脚本中打印消息,可以使用 einfo
和 eerror
函数以及它们对应的函数 einfon
、eerrorn
等,它们与前者相同,但不会打印尾随换行符 (\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
命令的额外参数。