【发布时间】:2015-06-14 22:32:42
【问题描述】:
我正在尝试修复使用 echo 的脚本,即使用内置命令而不是命令,我该如何防止这种情况发生?
我知道我可以通过 /bin/echo 强制使用它,但我不想硬编码路径(为了可移植性)。
我认为使用以下内容:
$ECHO=`which echo`
$ECHO -e "text\nhere"
但which echo 返回:“echo: shell 内置命令”。
我最终定义了一个echo 函数,该函数使用@Kenster 推荐的env。这样我就不需要在脚本中修改调用 echo 了。
echo() {
env echo $*
}
# the function is called before the built-in command.
echo -en "text\nhere"
【问题讨论】:
-
'内置命令而不是命令'WTF?
-
我相信某些命令(如
echo)可以相当可靠地硬编码路径。 -
如果您关心可移植性,请使用
printf,而不是任何形式的echo。 -
@MichaelJaros 非内置
echo支持-e添加转义序列和-n以防止尾随新行。 -
已删除(且不正确)的答案建议使用
command内置函数:command echo ...。这不起作用,因为command绕过了 shell 函数,但没有绕过内置命令。我在这里提到这一点是为了那些无法阅读已删除答案并可能尝试使用command的人。