我有一个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"
所以我想知道是否有人有更好的方法来做到这一点。
答案 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
基本思路就是将分号分隔的字符串更改为以空格分隔的字符串,然后将其解析为数组。