2016-05-26 2 views
0

у меня есть Баш скрипт, как показано ниже:Bash Scripting - Nested Loop Принимая неправильные значения

day=(58 34 107 91 43 39 41 76 37 47 70 74 56 19 95 38 48 96 50 76 89 79 46 105 26 88 69 87 23 82 99 77 114 52 87 63 33 52 57 45 48 49 55 60 34 107 48 40 25 20 16) 

year=(1952 1953 1954 1955 1956 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004) 

for dom in $day; do 
    for yrs in $year; do 
      ncks -O -d time,$dom imdJJAS$yrs.nc ac_$yrs.nc 
    done 
done 

В основном я пытаюсь извлечь измерение времени для каждого года с использованием НКО ncks команды, сценарии запуска, но выходы неверны. За 1951 год он успешно извлек значение 58-го времени, но с 1952 года он извлекает последнее значение в дневном массиве (16), что неверно.

ive попытался установить {$day[a]} с его массивом, но если бы я использовал это, на протяжении всех лет извлекает последнее значение в массиве.

Я не слишком уверен, что я делаю неправильно, ив просмотрел довольно много сообщений об этом, но похоже, что он работает.

Id признателен за любую помощь.

Cheers!

ответ

0

Если я правильно понял ваше намерение, вы пытаетесь использовать соответствующие значения из обоих массивов. В этом случае вам нужен числовой индекс. for VAR in ARRAY выполняет итерацию по всем значениям массива.

+0

wow, кто-то не учитывает вас без комментариев. Какое мелкое движение им. – SaintHax

+0

Да, это несправедливо @MichealVehrs Чтобы ответить на ваш вопрос, да, это действительно мое намерение. –

1

$array сам по себе расширится до первого элемента массива. Для того, чтобы расширить до полного массива вы должны использовать ${array[@]}:

for dom in "${day[@]}"; do 
    for yrs in "${year[@]}"; do 
      ncks -O -d "time,${dom}" "imdJJAS${yrs}.nc" "ac_${yrs}.nc" 
    done 
done 

Я также процитировал ваши переменные разложения и изменил $dom и $yrs к ${dom} и ${yrs}. Позже это делается для предотвращения ошибочного обращения к неопределенной переменной $dom_abc - это не то же самое, что и ${dom}_abc

+0

Hi andlrc, Благодарим вас за помощь, я очень ценю это. Я пробовал свой код, как указано выше, но, похоже, использует только последний элемент в дневном массиве для $ {dom}. Массив года, кажется, выбран правильно, и я чувствую, что проблема связана с dom в "$ day [@]}"; выполните команду. Я просто не знаю, что это такое, ив просмотрел мой дневной массив, и в этом нет ничего плохого, что я могу видеть –

+0

Я обнаружил ошибку в свои годы, однако я забыл добавить 1966. Длина каждого массив теперь правильный, но он по-прежнему выглядит так, как последнее значение в дневном массиве перезаписывает все другие значения дня. –

+0

@KarlChan Где вы ссылаетесь на переменную 'dom'? Вне итерации? – andlrc