Bourne shell - 为数组中的每个元素创建一个循环?

时间:2013-05-15 13:33:30

标签: arrays loops sh

这是我的阵列:

ListTabs=""
ListTabs=$ListTabs"T_Tab1\n"
ListTabs=$ListTabs"T_Tab2\n"
ListTabs=$ListTabs"T_Tab3"   
echo $ListTabs
arrArr=0
OLD_IFS=$IFS;
IFS=\n
for listArr in ${ListTabs[@]}; 
do 
     #echo $listArr
     MYDIR[${ARR}]=$listArr
     (( arrIdx = $ARR+ 1 ))
done
IFS=$OLD_IFS;

然后,我以这种方式从select中做了一种id(FILESELECT_DAT是查询的输出文件):

sort -u ${FILESELECT_DAT} > ${SORT_OUT1}

ok ..现在我必须创建一个循环,为数组的每个元素创建一个SELECT,其中ID = $ {SORT_OUT1}的值。所以有2个循环。 ID上的一段时间和select的for循环。如何在$ {SORT_OUT1}内循环ID?我认为这是开始

id=""
while read $id
do
for ListTabs in ${listArr}
do 
-
-
SELECT * FROM $ListTabs(but the results is alway the first tab in each loop)
WHERE ID = ${id}(but he show me all IDs)
-
-
done < ${SORT_OUT1}

有什么想法吗?感谢

1 个答案:

答案 0 :(得分:2)

listArr=( T_Tab{1,2,3} )
sort -u "$FILESELECT_DAT" > "$SORT_OUT1"
while read id; do
    for ListTabs in "${listArr[@]}"; do
     ...
    done
done < "$SORT_OUT1"

请注意for - 循环体内没有任何东西从标准输入读取,否则它将消耗用于read命令的部分输入。为安全起见,请使用单独的文件描述符:

while read -u 3 id; do
...
done 3< "$SORT_OUT1"