在bash循环中处理多个变量

时间:2017-06-07 19:13:28

标签: bash loops while-loop

我有4个这样的变量列表:

YEAR1="2008 2008 2009"
YEAR2="2008 2009 2009"
MONTH1="11 12 01"
MONTH2="12 01 02"

我想将它们传递给Python脚本,方式是首先输入所有4个列表中的第一个项目,然后输入每个列表中的第二个项目,依此类推。我相信我需要为此使用WHILE循环,但我的工作并不起作用。我也没有收到错误消息。

while read $YEAR1 $YEAR2 $MONTH1 $MONTH2;do
    python python-code.py "$YEAR1" "$MONTH1" "$YEAR2" "$MONTH2"
done

我的Python脚本已经过测试并且有效,我只是没有理解bash脚本。

2 个答案:

答案 0 :(得分:3)

改为使用数组:

#! /bin/bash
YEAR1=(2008 2008 2009)
YEAR2=(2008 2009 2009)
MONTH1=(11 12 01)
MONTH2=(12 01 02)

for (( i=0 ; i < ${#YEAR1[@]} ; ++i )) ; do
    python python-code.py ${YEAR1[i]} ${YEAR2[i]} ${MONTH1[i]} ${MONTH2[i]}
done

答案 1 :(得分:0)

这是另一种适用于任意数量的列/字段的解决方案......

# Any number of values works
YEAR1="2008 2008 2009 2010 2011"
YEAR2="2008 2009 2009 2011 20012"
MONTH1="11 12 01 09 03"
MONTH2="12 01 02 06 07"


NUM_COLS=5

for i in $(seq 1 $NUM_COLS)  # iterate each column/field
do
  # Dynamically set field specifiers y1, y2, m1, m2
  y1=$i y2=$((i+NUM_COLS)) m1=$((i+NUM_COLS*2)) m2=$((i+NUM_COLS*3))

  # Select the 4 fields, passing in concatenated data  on one line
  cut -d ' ' -f $y1,$y2,$m1,$m2 <<< "${YEAR1} ${YEAR2} ${MONTH1} ${MONTH2}"
done