任何人都可以解释为什么涉及复合运算符的以下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
答案 0 :(得分:2)
问题是您已经声明了一个名为lines
的数组,但是您尝试访问它,就像它被命名为line
一样。您需要将${line[$i]}
的每次出现更改为${lines[$i]}
。
更好的是,你可以省去算术for-loop,并写:
for line in "${lines[@]}" ; do
可让您将该行称为$line
或"$line"
而不是${lines[$i]}
。
(顺便说一句,为什么你有这个逻辑来修改$IFS
?看起来它的默认值也可以正常工作。)