如何用空格以外的其他内容分隔 csh 数组元素?

问题描述 投票:0回答:2

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

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

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

arrays csh separator
2个回答
5
投票

在 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

来源


0
投票

很抱歉我的声誉很低,无法发表评论。我想纠正 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 个元素的空数组。

© www.soinside.com 2019 - 2024. All rights reserved.