2017-02-05 57 views
1

我想建立一個while循環,更新數組中的值,但我一直收到一個命令找不到錯誤。單行while循環更新數組

i=1 
bool=true 
declare -a LFT 
declare -a RGT 
while read -r line; do 
    ${LFT[$i]}=${line:0:1}; ${RGT[$i]}=$(wc -l < temp$i.txt); 
    if [ ${LFT[$i]} -ne ${RGT[$i]} ]; then 
    $bool=false; 
    fi; 
    ((i=i+1)); 
done<output2.txt 

我正在閱讀的文件在每行上都包含一個數字,我想填充數字LFT,每個條目都是數字。數組RGT應該填充表示爲temp * .txt的文件的行數。我想測試以確保這兩個數組的每個條目都相同。

但是,我不斷收到一個錯誤:command =#not found,其中#是無論數字在文件中的行上。我是否錯誤地爲數組賦值?此外,我得到錯誤:命令true = false未找到。我假設這與將值分配給布爾值有關。 感謝

回答

1

的問題是,在這些線路上:

${LFT[$i]}=${line:0:1}; ${RGT[$i]}=$(wc -l < temp$i.txt); 

將其更改爲:

LFT[$i]=${line:0:1}; RGT[$i]=$(wc -l < temp$i.txt); 

有效的分配應該是:

var=<expression> 

而不是

$var=<expression> ## this will be interpreted by the shell as a command 

這是Bash程序員常犯的錯誤之一。更多Bash pitfalls的地方。

+1

哇,這是一個簡單的修復。謝謝 –

+0

有沒有一種調試方法來找出問題所在,或者只是從經驗中知道? –

+0

這些東西中有一些是伴隨着練習而來的。但是,您始終可以通過http://www.shellcheck.net/傳遞您的代碼 - 這是一個非常棒的工具。所以對於瞭解Bash以及許多其他的東西,這是一個很棒的地方。 – codeforester