2012-02-25 23 views
1

任何人都可以解释为什么涉及复合运算符的下列bash代码的行为不如预期?基本上,没有进入if语句里面的for循环,但我通过它应该运行有返回正确的参数: ./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 2012-02-25 02:44:41

+1

@ user788171:不客气!但我仍然认为你应该使用常规的for循环。 – ruakh 2012-02-25 02:49:16