2017-02-05 14 views
1

配列の値を更新するwhileループを作成しようとしていますが、コマンドが見つかりませんでした。ループを更新する1行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 

私が読んでいるファイルには、各行に1桁の数字が含まれていて、それぞれの桁が数字の配列LFTを入力したいと思います。配列RGTには、temp * .txtというファイルの行数が格納されます。そして、これら2つの配列の各エントリが同じであることを確認するためにテストしたいと思います。

しかし、私はエラーが発生し続けます。command =#not found、#はファイル内の行にある数字です。値を配列に間違って割り当てていますか?また、私はエラーを取得します:コマンドの真= 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のプログラマが行う一般的なミスの一つです。 More Bash pitfallsこちら。

+1

うわー、それはそう簡単な修正でした。ありがとうございます –

+0

問題がどこにあるのかを知るためのデバッグの方法はありますか、経験から知っていますか? –

+0

これらの事のいくつかは練習に伴います。しかし、あなたはいつでもhttp://www.shellcheck.net/を通してコードを渡すことができます - それはすばらしいツールです。そしてSOは、他の多くのものの中で、Bashについて学ぶ素晴らしい場所です。 – codeforester