Несколько списков слов в цикле foresh скрипта csh - PullRequest
3 голосов
/ 14 сентября 2010

У меня есть сценарий Cshell, который я изменяю, чтобы иметь связанные местоположения ввода и вывода. все функции выполняются в цикле foreach, например:

set INPUT_LOCATION_LIST = "loc1 loc2 loc3 loc4"
foreach location ($INPUT_LOCATION_LIST)
#***Do some stuff ***
end

Я хотел бы иметь выходной список с другими значениями, чем входной список, но проходить через него каждую итерацию цикла foreach. У человека на foreach просто есть

foreach name (wordlist)

как определение. так что имеем дело только с одним. моя текущая мысль о том, чтобы иметь дело с этим, состоит в том, чтобы список слов содержал и место ввода и вывода и затем анализировал это в сценарии:

set INPUT_LOCATION_LIST = "loc1;out1 loc2;out2 loc3;out3 loc4;out4"

так что мне интересно, есть ли у кого-нибудь лучший способ сделать это.

Ответы [ 2 ]

5 голосов
/ 15 сентября 2010

Вы можете перебрать один список, используя foreach, а другой - обработать как массив и использовать shift:

set INPUT_LOCATION_LIST = "loc1 loc2 loc3 loc4"
set OUT_LIST = (out1 out2 out3 out4)

foreach location ($INPUT_LOCATION_LIST)
    do_something $location $OUT_LIST[1]
    shift OUT_LIST
end
1 голос
/ 15 сентября 2010

Обычно я не пользуюсь csh, но ваш вопрос попался мне на глаза. Вероятно, есть решение с меньшим количеством шагов, но такая вещь работала в моей версии csh:

foreach location ($INPUT_LOCATION_LIST)
    set one_word_with_space = ${location:s/;/ /}
    set loc_out = ($one_word_with_space)
    set loc = ${loc_out[1]}
    set out = ${loc_out[2]}
    ...
end

Основная идея состоит в том, чтобы просто заменить строку, разделенную точкой с запятой, на строку, разделенную пробелом, а затем проанализировать ее в массив.

...