Linux Bash-使用从文件读取的条件中断循环

Linux Bash-使用从文件读取的条件中断循环,linux,bash,Linux,Bash,我正在使用bash运行一些命令,直到它们达到我设置的目标 以下是我的代码和说明: #!/bin/bash #keep running some commands until a target is met while : do #some executions that generate a number and write into flag.txt #read the number from flag.txt and store in variable flag whil

我正在使用bash运行一些命令,直到它们达到我设置的目标

以下是我的代码和说明:

#!/bin/bash

#keep running some commands until a target is met
while : 
do
  #some executions that generate a number and write into flag.txt 

  #read the number from flag.txt and store in variable flag
  while read flag
  do
    echo $flag
  done <<< $(cat flag.txt)

  echo "hello $flag"

  #if the number from the file is >= the target I set (i.e. 0.717), then break the loop and finish the computation, otherwize, keep running.
  if [ $(echo "$flag >= 0.717" | bc) -eq 1 ]
  then
    break
  fi

done
我认为这是因为第二个while循环在子shell中运行,$flag的值保持在第二个while循环中

  do
    echo $flag
  done <<< $(cat flag.txt)

  echo "hello $flag"
然后我可以得到正确的结果:显然,第二个while循环外的$flag值为空:

0.7172
hello 

我想知道是否有办法解决这个问题?

如果我正确理解您的问题,您应该将if语句放入嵌套循环中。这样,当达到目标时,它就可以中断。您可以在满足此条件时设置另一个标志,并使用该标志从外部循环中断


一元运算符错误是由于$flag没有任何值,并且if语句只计算第二个操作数。

根据您的注释,听起来您只需要替换:

  while read flag
  do
    echo $flag
  done <<< $(cat flag.txt)
  echo "hello $flag"
  if [ $(echo "$flag >= 0.717" | bc) -eq 1 ]; then
    break
  fi

导致while循环终止失败的read标志将标志设置为空字符串。您能告诉我怎么做吗?谢谢@但你有个XY问题。你的代码对我来说没什么意义。你到底想做什么?这段代码不完整,令人困惑。为了便于阅读,请做一个缩进。。。。完成0.7172 hello
  while read flag
  do
    echo $flag
  done <<< $(cat flag.txt)
  echo "hello $flag"
  if [ $(echo "$flag >= 0.717" | bc) -eq 1 ]; then
    break
  fi
read flag < flag.txt
echo "hello $flag"
if test "$(echo "$flag >= 0.717" | bc)" -eq 1; then
    break
fi
if awk '{ exit ! ($1 >= .717)}' flag.txt; then break; fi