You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本条件判断异常:无论输入均返回相同结果的问题咨询

这是个很常见的Shell脚本小坑!你的问题出在test命令里的等号两边没有加空格,Shell对空格的要求特别严格,咱们一步步来理清楚:

问题根源

在Shell的test命令(或者等价的[ ]语法)中,=是一个比较运算符,它的两边必须有空格。你写的"$name"=akash会被Shell当成一个完整的字符串——不管$name是什么值,这个字符串都是非空的,而test对非空字符串的判断结果是true,所以不管你输入什么,都会执行then分支的内容。

修正后的脚本

把等号两边加上空格就可以解决问题了,另外为了脚本可读性,建议把每行命令分开写(你原来的脚本挤在一行,虽然语法允许,但可读性很差):

#!/bin/sh
read name
if test "$name" = "akash"
then
    echo "Hello how are you"
else
    echo "sorry"
fi

额外优化建议

  1. 你也可以用更常用的[ ]语法替代test,效果完全一致:
#!/bin/sh
read name
if [ "$name" = "akash" ]
then
    echo "Hello how are you"
else
    echo "sorry"
fi
  1. 如果你的Shell支持(比如bash),还可以用[[ ]],它的语法更宽松,还能避免一些引号相关的问题:
#!/bin/bash
read name
if [[ $name == akash ]]
then
    echo "Hello how are you"
else
    echo "sorry"
fi

这样修改后,输入akash会输出问候语,输入其他内容就会触发else分支的sorry了。

内容的提问来源于stack exchange,提问作者Akash Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:57:50