我怎样才能将 csh 数组元素与 space 以外的东西分开?

How can I separate csh array elements with something other than a space?

在我正在处理的 csh 脚本中,我需要包含 spaces 的数组元素,因此我需要使用 space 以外的其他内容分隔这些元素,例如逗号。例如,我想用类似的东西初始化我的数组:

set the_array=('Element 1','Element 2','Element 3','Element 4')

注意:我很清楚在 csh 中工作是多么不受欢迎。然而,对于这个项目,我别无选择……是的,我试图说服那些应该改变的权力,但已经有一个庞大的代码库需要重写,所以这就是被拒绝了。

在 CSH 中有两种初始化字符串数组(其中包含空格)的方法:

第一种方式,使用逗号,使用大括号语法,或者"glob pattern":

% set the_array = {'Element 1','Element 2','Element 3','Element 4'}
% echo $the_array[1]
Element 1

第二种方式,不带逗号,使用括号:

% set the_array = ('Element 1' 'Element 2' 'Element 3' 'Element 4')
% echo $the_array[1]
Element 1

这种方式还允许您创建多行数组:

% set the_array = ('Element 1' \
? 'Element 2')
% echo $the_array[1]
Element 1
% echo $the_array[2]
Element 2

要遍历 the_array,您不能简单地访问 foreach 中的每个元素,如下所示:

% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4

需要从1循环到N,其中N是数组的长度,使用seq,如下图:

% foreach i ( `seq $the_array` )
foreach? echo $the_array[$i]
foreach? end
Element 1
Element 2
Element 3
Element 4

请注意,CSH 使用从 1 开始的索引。

不幸的是,如您所见,使用带逗号的括号会产生以下结果:

% set the_array = ('Element 1','Element 2','Element 3','Element 4')
% echo $the_array[1]
Element 1,Element 2,Element 3,Element 4

来源