BASH中位置参数$1的或运算符使用问题求助
解决BASH中限制位置参数$1只能为1或2的问题
我猜你大概率是在条件判断里用错了BASH的语法,才导致不管传什么值都输出BAD。咱们一步步来修正这个问题,先看常见的错误写法,再给你几种正确的实现方式。
先说说你可能踩的坑
很多新手会直接这么写:
# 错误写法! if [ $1 = 1 || $1 = 2 ]; then echo "GOOD" else echo "BAD" fi
这在BASH里是不合法的——因为[其实是test命令的别名,它不支持直接用||作为逻辑或。BASH会把||当成命令分隔符,导致语法解析出错,最终逻辑判断完全失效,所以不管你传什么值,都会进入BAD分支。
几种正确的实现方式
方式1:用[[进行条件判断(推荐)
[[是BASH的扩展条件判断语法,支持直接用||和&&,写法更直观,还能避免很多引号相关的坑:
#!/bin/bash if [[ "$1" == 1 || "$1" == 2 ]]; then echo "GOOD" else echo "BAD" fi
如果要反过来判断不符合的情况也可以:
#!/bin/bash if [[ "$1" != 1 && "$1" != 2 ]]; then echo "BAD" else echo "GOOD" fi
方式2:用[(test命令)的正确写法
如果你坚持用标准的test命令,有两种写法:
- 用
-o选项表示逻辑或:
#!/bin/bash if [ "$1" = 1 -o "$1" = 2 ]; then echo "GOOD" else echo "BAD" fi
- 用
||连接两个独立的test命令:
#!/bin/bash if [ "$1" = 1 ] || [ "$1" = 2 ]; then echo "GOOD" else echo "BAD" fi
方式3:加上参数缺失的检查
如果用户没传任何参数,上面的脚本可能会报错,咱们可以先判断参数是否存在:
#!/bin/bash if [[ -z "$1" ]]; then echo "BAD: 请传入有效的参数(1或2)" elif [[ "$1" == 1 || "$1" == 2 ]]; then echo "GOOD" else echo "BAD" fi
内容的提问来源于stack exchange,提问作者faceless
相关产品推荐
相关产品推荐

