Ubuntu下Bash脚本中如何正确输出逻辑表达式执行结果?
解决Bash脚本中子串匹配结果输出问题
你的代码存在两个关键错误,导致无法正常运行:
错误1:变量赋值包含空格
Bash中变量赋值时,=左右不能有空格,否则Shell会把变量名当成命令执行,引发错误。原代码里的var1 = 'abc'和var2 = 'bc'写法错误,必须去掉空格。
错误2:条件表达式的结果获取方式错误
[[ $var1 =~ $var2 ]]是Bash的条件判断语句,它不会直接返回可插值的1/0结果,而是通过退出状态码表示结果(0为真,1为假)。你不能直接用$[[ ... ]]的方式获取结果,可通过以下两种方式处理:
方法1:先执行判断,再获取退出状态码
var1='abc' var2='bc' # 执行子串匹配判断 [[ $var1 =~ $var2 ]] # $? 表示上一条命令的退出状态码,转换为1(真)或0(假) result=$(( !$? )) echo "Print result: $result"
解释:[[ ... ]]匹配成功时退出状态码为0,!$?会将其转为1,符合预期输出。
方法2:直接在算术表达式中判断
var1='abc' var2='bc' # 用算术表达式的三元运算符直接返回1或0 echo "Print result: $(( [[ $var1 =~ $var2 ]] ? 1 : 0 ))"
解释:Bash算术支持三元运算符,[[ ... ]]为真时返回1,否则返回0。
两种方法都能输出你想要的Print result: 1结果。
内容的提问来源于stack exchange,提问作者SolidMechanicsFan
相关产品推荐
相关产品推荐

