Shell脚本中的布尔值
发布时间:2020-12-16 01:07:20 所属栏目:安全 来源:网络整理
导读:我有一个boolean for while循环的问题.因此,我切换到for循环. 但是,在满足条件后,我无法更改布尔值. doFirst= true for (( j=1; j=7; j++)) do letter="A" seatChoses=$letter$j flagRand=$(echo $flightSeatBooked | awk -v flseatRand=$flightSeatBooked -
我有一个boolean for while循环的问题.因此,我切换到for循环.
但是,在满足条件后,我无法更改布尔值. doFirst= true for (( j=1; j<=7; j++)) do letter="A" seatChoses=$letter$j flagRand=$(echo $flightSeatBooked | awk -v flseatRand=$flightSeatBooked -v orseatRand=$seatChoses '{print match(flseatRand,orseatRand)}') if $doFirst ; then **$doFirst= false** // Here is the error! if [ $flagRand -eq 0 ]; then echo "System generated a slot,"$seatChoses" for you. [Y or N]" fi fi done
在shell脚本中没有布尔值这样的东西(也就是说,你可以存储在变量中的东西,并视为布尔值).命令是true和false; true退出值为0,false退出非零值. bash中的if语句接受命令;如果该命令返回0,则执行then子句,否则执行else子句.
doFirst= true 这条线完全不符合您的期望.在shell脚本中,等号后面不能有任何空格.空间意味着你完成了任务,现在正在编写一个命令.这相当于: doFirst="" true 此外,如果您在命令之前有一个赋值(像这样),那么它实际上并不在shell中执行赋值.这仅在该命令的环境中设置了该环境变量;赋值对该命令之外的任何内容都没有影响. if $doFirst ; then 这会扩展$doFirst变量,并尝试将结果解释为命令.奇怪的是,如果$doFirst未定义(正如我上面解释的那样),这将采用then分支.此时,你再次犯了第一个错误,试图将变量设置为假,再一次,没有任何反应; $doFirst未定义.你犯下了另一个错误:尝试分配$doFirst;使用$来获取变量的值,在设置时,使用裸名称. 我的建议是不要试图在Bash中使用布尔值;只需使用字符串,并检查字符串的值.请注意,我删除了空格,所以现在我将它设置为那个确切的字符串;并且没有命令,因此这将在shell中设置变量,而不是在单个命令的环境中: doFirst=true # ... if [ $doFirst = true ]; then doFirst=false # ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |