Bash简单条件判断求值错误:false参数被判定为真问题排查
问题原因
你当前使用的if [ "$1" ]; then判断逻辑,本质是判断传入的字符串是否为非空值,而非判断字符串内容对应的布尔值。只要参数内容不为空,不管是true还是false,这个判断都会返回真,这就是你传入false也判定为真的核心原因。
修复方案
有两种常用的实现方式可以满足你的需求:
方案1:判断参数内容是否匹配true字符串
直接校验参数的文本内容即可,兼容性最好,适用于所有shell环境:
#!/bin/bash copyFile() { echo "copyFile #Parameter:$1" if [ "$1" = "true" ]; then echo "Parameter is true" else echo "Parameter is false" fi } copyFile true copyFile false
方案2:利用bash内置布尔命令的返回值
true和false本身就是bash的内置命令,true执行后返回值为0(shell中判定为真),false执行后返回值为非0(shell中判定为假),可以直接用参数作为命令执行判断:
#!/bin/bash copyFile() { echo "copyFile #Parameter:$1" if "$1"; then echo "Parameter is true" else echo "Parameter is false" fi } copyFile true copyFile false
两种方案执行后都会得到你预期的结果:
copyFile #Parameter:true Parameter is true copyFile #Parameter:false Parameter is false
内容的提问来源于stack exchange,提问作者JavaSheriff
相关产品推荐
相关产品推荐

