For example, I want to split "one,two,three" with comma as delimiter and use a loop to process the resulted three substring separately.
Asked
Active
Viewed 4.7k times
3 Answers
14
A simpler solution than the current one presented involves using the built-in substitution modifer -- there is no need or reason to wastefully use a loop or external command substitution in this instance:
set list = one,two,three
set split = ($list:as/,/ /)
echo $split[2] # returns two
() creates a list, the :s is the substitution modifier and :as repeats the subtitution as many times as needed.
Furthermore, t/csh does not require quoting of bare strings, nor variables that do not require forced evaluation.

Keith Thompson
- 254,901
- 44
- 429
- 631

reflux
- 141
- 1
- 4
-
What if list = "one,two or three,four"? How do you get: "two or three"? – Gik Jan 22 '22 at 21:40
-
Maybe then: echo "$list" | awk -F',' '{print $2}' is better... – Gik Jan 22 '22 at 21:54
9
For example:
set s = "one,two,three"
set words = `echo $s:q | sed 's/,/ /g'`
foreach word ($words:q)
echo $word:q
end
But consider whether csh is the right tool for whatever job you're doing:
http://www.bmsc.washington.edu/people/merritt/text/cshbad.txt

Keith Thompson
- 254,901
- 44
- 429
- 631
-
1
-
It quotes the variable; `$s:q` is similar to `"$s"`. It's not needed for this example, but it might be in other cases (say, where you have whitespace in the data). – Keith Thompson Oct 12 '11 at 06:32