我有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脚本。
答案 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