2017-06-07 81 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