gpt4 book ai didi

shell - Shell 脚本中的 bool 值

转载 作者:行者123 更新时间:2023-12-04 09:19:18 26 4
gpt4 key购买 nike

我有一个 bool 值 for while 循环问题。因此,我改为使用 for 循环。
但是,在满足条件后,我仍然无法更改 bool 值的值。

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 脚本中没有 bool 值这样的东西(也就是说,你可以存储在变量中,并作为 bool 值处理)。 truefalse是命令; true以值 0 退出,并且 false以非零值退出。安 if bash 中的语句需要一个命令;如果该命令返回 0,则 then子句被执行,否则 else条款是。

doFirst= true

这条线根本不符合您的预期。在 shell 脚本中,等号后不能有任何空格。空格表示您已完成作业,现在正在编写命令。这相当于:
doFirst="" true

此外,如果您在命令之前有一个赋值(像这样),那实际上并没有在 shell 中执行赋值。仅在该命令的环境中设置该环境变量;该分配对该命令之外的任何内容都没有影响。
if  $doFirst ; then

这扩展了 $doFirst变量,并尝试将结果解释为命令。奇怪的是,如果 $doFirst未定义(正如我上面解释的那样),这需要 then分支。那时,您又犯了第一个错误,试图将一个变量设置为 false,但同样没有任何 react ; $doFirst未定义。你犯了进一步的错误,试图分配 $doFirst ;您使用 $要获取变量的值,在设置时,使用裸名称。

我的建议是不要尝试在 Bash 中使用 bool 值;只需使用字符串,并检查字符串的值。请注意,我删除了空格,所以现在我将其设置为那个确切的字符串;并且没有命令,因此这会在 shell 中设置变量,而不是在单个命令的环境中:
doFirst=true
# ...
if [ $doFirst = true ]; then
doFirst=false
# ...

关于shell - Shell 脚本中的 bool 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com