在我正在处理的 csh 脚本中,我需要包含空格的数组元素,因此我需要用空格以外的其他内容(例如逗号)分隔这些元素。 例如,我想用类似的东西初始化我的数组:
set the_array=('Element 1','Element 2','Element 3','Element 4')
注意:我很清楚在 csh 中工作是多么不可取。 然而,对于这个项目我别无选择……是的,我试图说服当局应该改变这一点,但是已经有一个很大的代码库需要重写,所以这就是被拒绝了。
在 CSH 中初始化字符串数组(其中包含空格)有两种方法:
第一种方法,使用逗号,使用大括号语法,或“glob 模式”:
% 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
来源
很抱歉我的声誉很低,无法发表评论。我想纠正 Michael Recachinas 关于无法迭代包含空格的元素的主张。
使用
q
修饰符可以且只能迭代包含空格的元素。
% set the_array = ( 'Element 1' 'Element 2' 'Element 3' 'Element 4' )
% foreach i ( $the_array:q )
foreach? echo $i
foreach? end
Element 1
Element 2
Element 3
Element 4
与 Bourne shell 不同,如果访问或分配的元素超出范围,C shell 会引发错误。因此,那些希望初始化大型数组的人可能会发现自己处于复杂的境地。无法访问或分配超出范围的元素,但以下过程可以轻松初始化大型数组。
% set the_large_array = {,}{,}{,}{,}{,}{,}{,}{,}{,}{,}
上述过程初始化了一个包含 1024 个元素的空数组。