3

我有一个 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"

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

4

2 回答 2

5

您可以使用和遍历另一个列表,方法foreach是将 at 视为数组并使用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
于 2010-09-15T00:27:20.670 回答
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

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

于 2010-09-15T06:20:17.967 回答