Bash脚本 - 嵌套循环采用不正确的值

时间:2016-05-26 12:12:30

标签: linux bash

我有一个bash脚本如下:

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 

基本上我试图使用NCO ncks命令提取每年的时间维度,脚本运行但输出不正确。对于1951年,它成功地提取了第58个时间值,但是从1952年开始,它提取了日数组中的最后一个值(16),这是不正确的。

我已尝试设置{$day[a]},因为它是一个数组,但是如果我使用它,那么所有年份都会提取数组中的最后一个值。

我不太确定我做错了什么,我已经看了很多关于这个的帖子,但它看起来似乎有效。

我很感激任何帮助。

干杯!

2 个答案:

答案 0 :(得分: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

不同

答案 1 :(得分:0)

如果我理解你的意图正确,你试图使用两个数组中的相应值。在这种情况下,您需要一个数字索引。 for VAR in ARRAY遍历数组的所有值。