csh脚本中的多个单词列表foreach循环

时间:2010-09-14 19:00:35

标签: shell csh

我有一个Cshell脚本,我正在修改它以获得相关的输入和输出位置。 功能都发生在foreach循环中,如下所示:

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

我希望输出列表具有与输入列表不同的值,但是每次迭代都会遍历foreach循环。 foreach的人只是

foreach name (wordlist)

作为定义。所以只处理一个。我目前处理它的想法是让wordlist包含输入和输出位置,然后在脚本中解析它:

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

所以我想知道是否有人有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:5)

您可以使用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 :(得分:1)

我通常不使用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

基本思路就是将分号分隔的字符串更改为以空格分隔的字符串,然后将其解析为数组。