赞
踩
bash函数不支持像其他高级语言一样的高级的返回变量,bash只能返回数值。
bash有bool变量,但是bool操作符号只能存在于[ ... ]
、[[ ... ]]
等特定语法结构中
举个例子 bash中,想要对bool变量y取反并赋值给变量x ,这样写x=!$y
是不合法的,这种诉求是很常见的
此时 要么放弃bash,比如换成别的脚本语言fish、nushell、zsh等等,或者干脆换成py
但bash比起py也有好的一面,bash比py还简洁
那么bash中到底如何写一个逻辑取反函数呢?
最丑陋的办法 是 返回值让全局变量承载,但这太丑了,如果脚本很多,有重名变量,难以排查,是给自己埋雷。
好一点的办法 用eval实现像c语言中指针的味道,比方下面这个实现:
#!/bin/bash # fileName: bool_not.sh #【描述】 bool取反 #【依赖】 #【术语】 #【备注】 _importBSFn "argCntEq2.sh" function bool_not() { #断言有两个参数 argCntEq2 $* || return $? #输入bool值 local inBoolVar=$1 #返回 全局变量名 local outBoolVarName=$2 #取反,放入变量notBoolVar中 local notBoolVar=false; $inBoolVar || notBoolVar=true; #利用eval将结果局部变量赋值给入参指定的全局变量 eval "$outBoolVarName=$notBoolVar" } #使用举例 #source bool_not.sh # x=true ; bool_not $x "not_x" ; echo $not_x # eval执行了 not_x=false # 变量not_x为false # y=false ; bool_not $y "not_y" ; echo $not_y # eval执行了 not_y=true # 变量not_y为true
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。