在行https://stackoverflow.com/questions/906590/echo-version-doesnt-works我需要知道版本echo
$ type -a echo | cut -d " " -f 3- | xargs -d '\n'
a shell builtin /usr/bin/echo /bin/echo
$ /usr/bin/echo -v
-v
$ /bin/echo -v
-v
答案1
标准echo
不接受任何选项(或者使用 XSI 扩展,仅识别参数-n
)。在许多情况下,echo
您使用的是 shell 中内置的 shell,并且在我测试的所有 shell 中,内置程序都echo
无法识别--version
.不过,他们至少确实以不同的方式认识到-e
。我发现唯一可以识别的是 GNU coreutils 中的一个,即安装在许多 Linux 系统上的那个。-E
-n
echo
--version
/bin/echo
因此,在大多数情况下,识别版本的问题echo
归结为识别您正在运行的 shell。或者运行/bin/echo
,如果您知道您所在的系统是 GNU,而不是 Busybox。另外,正如上所看到的手册页,GNU coreutils 版本仅支持--version
, 不支持-v
或-V
。
但一般来说,如果您尝试完成某件事,则不需要依赖于某件事的特定版本,只需依赖支持的功能即可。从这个角度来看,直接使用printf
比echo
.
如果您想按原样打印字符串,请使用
printf "%s\n" "$var"
如果要处理字符串中的反斜杠转义符,请使用
printf "%b\n" "$var"
如果您想跳过最后的换行符,请\n
从第一个参数中删除 。
答案2
从@ilkkachu 的回答出发:
在我的 macOS 10.15 笔记本电脑上使用zsh
,我得到以下信息:
% which echo
echo: shell built-in command
% whereis echo
/bin/echo
% /bin/echo --version
--version
这是通过参考以下内容进行解释的:Apple在其新笔记本电脑中man echo
打包了 2002 BSD 版本- 它仅支持该参数。 :)echo
-n
答案3
我认为有 2 个echo
程序:来自 GNU Bash 和来自 GNU Coreutils。
echo
来自 GNU Bash
要找出
echo
(GNU Bash),您可以使用此命令help
或help echo
运行
echo
(GNU Bash)只需尝试使用echo
echo "Hello World" echo -e "line 1\ttab\nline2" echo --help # will return error "--help" echo --version # will return error "--version" help echo
要知道 Bash 版本试试
bash --version
,有没有 echo GNU Bash 版本
echo
来自 GNU Coreutils
- 要找出 echo (GNU Coreutils),您可以使用此命令
dpkg-query --listfiles coreutils | egrep '/bin/|/sbin/' man echo which echo
- 要运行 echo (GNU Coreutils) 你应该调用
/bin/echo
/bin/echo "Hello World" /bin/echo -e "line 1\ttab\nline2" /bin/echo --help # will return GNU Coreutils help /bin/echo --version # will return GNU Coreutils version help /bin/echo # will return error