2012-02-25 7 views
1

コンパウンド演算子に関係する以下のbashコードが期待どおりに動作しない理由は誰でも説明できますか?基本的には、何もforループ内のif文を入力していないが、私はそれを実行することで何かを返す必要があり、正しいパラメータを渡しています: ./my_bash_script 20100101 20120101bashでのコンパイルの比較

dates.txt 2000

#!/bin/bash 

old_IFS=$IFS 
IFS=$'\n' 
lines=($(cat dates.txt)) # array 
IFS=$old_IFS 

for ((i=1; i<${#lines[@]}; i++)) 
do 
    if [[ ${line[$i]} -ge $1 && ${line[$i]} -le $2 ]]; then 
     echo 0 > ${line[$i]} # redirect to file 
     echo ${line[$i]} 
    fi 
done 
以降のすべての日のリストです

答えて

2

linesという名前の配列が宣言されていますが、その配列の名前がlineであるかのようにアクセスしようとすると問題が発生します。 ${line[$i]}のすべての出現を${lines[$i]}に変更する必要があります。

いっそのこと、あなたは、forループの算術で済ます、と書くことができますようになる

for line in "${lines[@]}" ; do 

はあなたが$lineまたは"$line"ではなく${lines[$i]}として、ラインを参照してください。

(そのデフォルト値は全く同じように機能するであろうように思えところで、どのように来るあなたはロジックが$IFSを変更することがありますか?。)

+0

私はラインのバグ固定 - >行となりましたコードの作品をタイプミスが問題だったことが分かりました、ありがとう。 – user788171

+1

@ user788171:ようこそ!しかし、私はまだ普通のforループを使うべきだと思います。 – ruakh