[英]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.