2010-09-14 16 views
3

J'ai un script Cshell que je modifie pour avoir des emplacements d'entrée et de sortie. la fonctionnalité tout se passe dans une boucle foreach comme ceci:Listes de mots multiples dans le script csh foreach loop

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

Je souhaite avoir une liste de sortie avec des valeurs différentes de celles de la liste d'entrée, mais à travers elle traverse chaque itération dans la boucle foreach. L'homme pour foreach a simplement

foreach name (wordlist) 

comme définition. donc seulement traiter avec un seul. ma pensée actuelle sur le traitement avec elle est d'avoir la liste des mots contiennent à la fois l'entrée et l'emplacement de sortie, puis l'analyser dans le script:

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

si im me demandais si quelqu'un a une meilleure façon de le faire.

+0

La balise 'c' est destinée aux questions liées au langage de programmation C. 'csh', appelé" C Shell ", n'a rien à voir avec le langage de programmation C. J'ai retiré cette étiquette pour vous. – jer

+0

Je dois avoir tapé C et shell comme des étiquettes séparées, mon erreur. –

Répondre

5

Vous pouvez parcourir une liste à l'aide foreach et par l'autre en traitant comme un tableau à l'aide et 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

Je n'utilisent pas normalement csh, mais votre question a attiré mon attention. Il y a probablement une solution en moins d'étapes, mais ce genre de chose a travaillé dans ma version de 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 

idée de base est juste pour changer la chaîne des points-virgules dans une chaîne séparés par un espace, puis analyser cela en un tableau.