Gre*_*att 1 arrays csh separator
在我正在研究的csh脚本中,我需要包含空格的数组元素,所以我需要将这些元素与空格以外的其他元素分开,比如逗号.例如,我想用以下内容初始化我的数组:
set the_array=('Element 1','Element 2','Element 3','Element 4')
Run Code Online (Sandbox Code Playgroud)
注意:我很清楚在csh中工作有多么不受欢迎.然而,对于这个项目,我别无选择......是的,我试图说服权力应该改变,但是已经有一个庞大的代码库需要重写,所以这是被拒绝了.
有两种方法可以在CSH中初始化一个字符串数组(其中包含空格):
第一种方法,使用逗号,使用大括号语法或"glob模式":
% set the_array = {'Element 1','Element 2','Element 3','Element 4'}
% echo $the_array[1]
Element 1
Run Code Online (Sandbox Code Playgroud)
第二种方式,没有逗号,使用括号:
% set the_array = ('Element 1' 'Element 2' 'Element 3' 'Element 4')
% echo $the_array[1]
Element 1
Run Code Online (Sandbox Code Playgroud)
这种方式还允许您在多行上创建一个数组:
% set the_array = ('Element 1' \
? 'Element 2')
% echo $the_array[1]
Element 1
% echo $the_array[2]
Element 2
Run Code Online (Sandbox Code Playgroud)
要迭代the_array,您不能简单地访问a foreach中的每个元素,如下所示:
% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4
Run Code Online (Sandbox Code Playgroud)
您需要从1循环到N,其中N是数组的长度,使用seq如下所示:
% foreach i ( `seq $the_array` )
foreach? echo $the_array[$i]
foreach? end
Element 1
Element 2
Element 3
Element 4
Run Code Online (Sandbox Code Playgroud)
请注意,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
Run Code Online (Sandbox Code Playgroud)
来源