2017-06-07 117 views
0

我有这样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脚本中找到我的头。

回答

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 
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