2017-02-05 58 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