繁体   English   中英

Bash:如何在包含多个条件的while循环中读取文件?

[英]Bash: How to read file in while loop containing multiple conditions?

在阅读了大量文档和多种SO解决方案之后,我仍然无法通过read line命令在while循环中获得针对多种条件的正确语法。

我尝试了下面的以下堆栈溢出解决方案,但无济于事。

Bash脚本,while循环中有多个条件

!/bin/bash

while (( $(read -r line) && "$1" != 1 ))
do
  #Do stuff
done < myFile.txt

我得到的错误是((: && 8 != 1 : syntax error: operand expected (error token is "&& 8 != 1 "

还尝试read -r line而不是将其包装在$符号中,但仍然无法正常工作。

我哪里做错了?

编辑:忽略我原始帖子的逻辑。 最终将改变。 我只是想找出正确的语法。

我认为这里的正确语法是:

#!/bin/bash

while read -r line && (( "$1" != 1 ))
do
    # some stuff
done < myFile.txt

如果希望只要read成功就运行循环,则read命令需要移到(( ))之外。 就是说,我不确定您使用的条件,因为$1是传递给脚本的第一个参数,在您显示给我们的脚本中它永远不会改变。

while循环的语法为while compound_list do_group 1

其中compound_list基本上是任何有效的命令序列。

您当前的尝试是尝试保留命令/等。 算术表达式中,这就是为什么您会遇到语法错误。 不过, compound_list两个位都不是算术表达式(第二个可能是,但不一定是)。

所以你想要更多这样的东西

while read -r line && [ "$1" != 1 ]

或保留算术表达式而不是[像这样

while read -r line && (( "$1" != 1 ))

话虽如此,正如汤姆·费内奇(Tom Fenech)在对帖子的评论中指出的那样,您向我们展示的代码中的任何内容都不会导致$1的值发生变化。 那么测试的那部分到底应该做什么?

您在链接的答案中遵循建议的问题是,您没有注意各种类型的方括号/括号/等。 去了,它们的意思是什么(答案并没有解释它们),而且这个问题中的条件都不是命令本身。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM