【问题标题】:change a counter according to a output function in a while loop - in bash根据while循环中的输出函数更改计数器 - 在bash中
【发布时间】:2019-07-26 01:23:53
【问题描述】:

我有一个随机返回 R 或 L 的函数。我想根据这个函数的输出来改变一个计数器:我想在 R 出现时增加计数器,在 L 出现时减少它。

我的问题:计数器不会根据输出函数(R 或 L)而改变,并且计数器只减少或只增加。

#GetsomeLoR is a function returning R or L
function GetsomeLoR() {
  set -- "R" "L"
  eval echo \$$(expr $RANDOM % 2 + 1)
  sleep 0.015
}

return_var=$(GetsomeLoR) # return the output of the function named GetsomeLoR
counter="1" 
number_max="60"

while [ $counter -lt $number_max ]; do
    GetsomeLoR && sleep 0.1 
    if [[ $return_var == "L" ]]; then
        counter=$[$counter-1]
        echo $counter increase
    elif [[ $return_var == "R" ]]; then
        counter=$[$counter+1]
        echo $counter decrease
    else
        echo error_buddy
    fi
done

我的问题:如何根据名为 GetsomeLoR 的输出函数更改计数器? 谢谢!

【问题讨论】:

  • GetsomeLoR () { if (( RANDOM % 2 )); then echo R; else echo L; fi; }。不需要expr,当然也不需要eval
  • 另外,$[...] 太可怕了,太可怕了已经过时了。请改用$((...))

标签: bash function while-loop output counter


【解决方案1】:

您没有在循环中捕获GetsomeLoR 的输出。因此,您使用的是它在循环外的第一次调用时返回的单个值。

while [ $counter -lt $number_max ]; do
    return_var=$(GetsomeLoR)
    sleep 0.1

【讨论】:

  • 另外,这很可能是一个无限脚本,因为您使用 $counter 作为您的 while 循环条件......它本身正在递增或递减。如果您只需要运行 60 次尝试,请使用不同的迭代器
  • @Tanktalus 这正是我所需要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多