Bash自定义函数echo输出作为参数传递触发command not found问题求助
Bash脚本运行异常原因说明
异常原因
- 命令替换的标准输出被捕获,且触发了单词拆分
你使用call-and-report $(useless "Hello World")写法时,$()命令替换符会优先执行useless "Hello World",并捕获该函数所有标准输出(也就是你预期要打印的Hello World),不会将内容输出到控制台。之后Bash会按默认分隔符(空格、制表符、换行符)把捕获到的Hello World拆分为两个独立参数传入call-and-report,因此函数内$1仅取到第一个值Hello,World成为未被使用的第二个参数。 - if判断直接将变量值作为命令执行
你将TEST_CRITERIA赋值为Hello后,if $TEST_CRITERIA逻辑会尝试把变量内容当做系统命令执行,而系统中不存在名为Hello的命令,因此抛出command not found报错,命令执行返回非0状态码,判断逻辑进入else分支输出failed。
修正方案
如果要实现你预期的输出,调整写法如下即可:
#!/usr/bin/env bash function useless { echo "$1" return 0 } function call-and-report { # 执行传入的所有参数作为判断命令 if "$@" then echo "passed" else echo "failed" fi } # 直接传入函数名和参数,不要用命令替换包裹 call-and-report useless "Hello World"
运行后输出符合预期:
Hello World passed
内容的提问来源于stack exchange,提问作者David McCabe
相关产品推荐
相关产品推荐

