2011-10-12 10 views
7

Na przykład chcę podzielić "jeden, dwa, trzy" przecinkiem jako ogranicznikiem i użyć pętli do przetworzenia wynikowego trzech podciągów osobno.Jak podzielić ciąg w CSH?

Odpowiedz

5

Na przykład:

set s = "one,two,three" 
set words = `echo $s:q | sed 's/,/ /g'` 
foreach word ($words:q) 
    echo $word:q 
end 

jednak rozważyć, czy csh jest odpowiednim narzędziem do pracy, co robisz:

http://www.bmsc.washington.edu/people/merritt/text/cshbad.txt

+0

Dzięki. Co znaczy: q znaczy tutaj? – zzhang

+0

Cytuje zmienną; '$ s: q' jest podobne do' "$ s" '. Nie jest to potrzebne w tym przykładzie, ale może być w innych przypadkach (powiedzmy, gdzie masz białe spacje w danych). –

7

Prostszym rozwiązaniem niż obecnie prezentowanym wiąże się używając wbudowany modulator podstawiania - nie ma potrzeby ani powodu, aby nieużytecznie używać pętli lub zewnętrznego podstawienia poleceń w tym przypadku:

set list = one,two,three 
set split = ($list:as/,/ /) 

echo $split[2] # returns two 

() tworzy listę, s: jest modyfikatorem podstawiania i: as powtarza podwielokrotność tyle razy, ile potrzeba.

Ponadto t/csh nie wymaga cytowania gołych ciągów ani zmiennych, które nie wymagają wymuszonej oceny.

1
set list = one,two,three 
foreach i ($list:as/,/ /) 
    echo $i 
end 
Powiązane problemy