为什么bash中test命令检测shell内置命令echo时返回错误?
为什么执行
test -e echo返回值为1 test -e的作用是检查当前工作目录下指定路径的文件/目录是否存在,不会自动搜索系统环境变量PATH中包含的可执行文件,这是返回1的核心原因。
- 你大概率混淆了「命令名」和「本地文件路径」两个概念:
echo作为可调用的命令,要么是Shell内置命令,要么存放在PATH覆盖的系统目录下(通常是/bin/echo),但test -e echo只会校验你当前执行命令的目录下有没有名为echo的文件或目录,不会全局搜索系统路径,只要当前目录没有这个文件,就会返回1。 - 可以做个简单验证:先执行
which echo拿到echo可执行文件的完整绝对路径,再运行test -e 你拿到的绝对路径 ; echo $?,此时返回值就是符合预期的0。 - 如果你需要判断某个命令是否能正常调用,不要用
test -e,推荐用command -v 命令名或者type 命令名实现,示例如下:# 返回0表示命令存在,返回1表示不存在 command -v echo >/dev/null 2>&1; echo $?
内容的提问来源于stack exchange,提问作者sushruta19
相关产品推荐
相关产品推荐

