bash中的复合比较

时间:2012-02-25 02:17:41

标签: bash comparison conditional-operator

任何人都可以解释为什么涉及复合运算符的以下bash代码的行为不符合预期吗?基本上,没有什么进入for循环内的if语句,但我传递正确的参数,应该通过运行返回一些东西: ./my_bash_script 20100101 20120101

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

1 个答案:

答案 0 :(得分:2)

问题是您已经声明了一个名为lines的数组,但是您尝试访问它,就像它被命名为line一样。您需要将${line[$i]}的每次出现更改为${lines[$i]}

更好的是,你可以省去算术for-loop,并写:

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

可让您将该行称为$line"$line"而不是${lines[$i]}

(顺便说一句,为什么你有这个逻辑来修改$IFS?看起来它的默认值也可以正常工作。)