[英]Bash: How to read file in while loop containing multiple conditions?
在阅读了大量文档和多种SO解决方案之后,我仍然无法通过read line命令在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.