составные сравнения в Bash - PullRequest
1 голос
/ 25 февраля 2012

Кто-нибудь может объяснить, почему следующий код bash, включающий составные операторы, не работает должным образом? в основном, ничего не входит в оператор if внутри цикла for, но я передаю ему правильные параметры, которые должны возвращать что-то, выполнив ./my_bash_script 20100101 20120101

date.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 Ответ

2 голосов
/ 25 февраля 2012

Проблема в том, что вы объявили массив с именем lines, но затем вы пытаетесь получить к нему доступ, как если бы он был назван line. Вам необходимо изменить каждое вхождение от ${line[$i]} до ${lines[$i]}.

Еще лучше, вы можете обойтись без арифметического цикла for и написать:

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

, что позволит вам ссылаться на строку как $line или "$line", а не ${lines[$i]}.

(Кстати, почему у вас есть эта логика для изменения $IFS? Кажется, что ее значение по умолчанию будет работать так же хорошо.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...