Arrays 如何将csh数组元素与空格以外的内容分开?
在我正在处理的csh脚本中,我需要有包含空格的数组元素,所以我需要用空格以外的东西来分隔这些元素,比如逗号。例如,我想用以下内容初始化数组:Arrays 如何将csh数组元素与空格以外的内容分开?,arrays,csh,separator,Arrays,Csh,Separator,在我正在处理的csh脚本中,我需要有包含空格的数组元素,所以我需要用空格以外的东西来分隔这些元素,比如逗号。例如,我想用以下内容初始化数组: set the_array=('Element 1','Element 2','Element 3','Element 4') 注:我很清楚在csh工作是多么不可取。然而,对于这个项目,我没有选择。。。是的,我试图说服powers,这应该改变,但是已经有一个很大的代码库需要重新编写,所以被拒绝了。在CSH中初始化字符串数组(其中有空格)有两种方法: 第一
set the_array=('Element 1','Element 2','Element 3','Element 4')
注:我很清楚在csh工作是多么不可取。然而,对于这个项目,我没有选择。。。是的,我试图说服powers,这应该改变,但是已经有一个很大的代码库需要重新编写,所以被拒绝了。在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')
% echo $the_array[1]
Element 1
% echo $the_array[2]
Element 2
要迭代\u数组,您不能简单地访问foreach
中的每个元素,如下所示:
% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4
% set the_array = ('Element 1','Element 2','Element 3','Element 4')
% echo $the_array[1]
Element 1,Element 2,Element 3,Element 4
您需要使用seq
从1循环到N,其中N是数组的长度,如下所示:
% foreach i ( `seq $the_array` )
foreach? echo $the_array[$i]
foreach? end
Element 1
Element 2
Element 3
Element 4
请注意,CSH使用基于1的索引
不幸的是,正如您所发现的,使用带逗号的括号将产生以下结果:
% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4
% set the_array = ('Element 1','Element 2','Element 3','Element 4')
% echo $the_array[1]
Element 1,Element 2,Element 3,Element 4
来源
- 在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')
% echo $the_array[1]
Element 1
% echo $the_array[2]
Element 2
要迭代\u数组,您不能简单地访问foreach
中的每个元素,如下所示:
% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4
% set the_array = ('Element 1','Element 2','Element 3','Element 4')
% echo $the_array[1]
Element 1,Element 2,Element 3,Element 4
您需要使用seq
从1循环到N,其中N是数组的长度,如下所示:
% foreach i ( `seq $the_array` )
foreach? echo $the_array[$i]
foreach? end
Element 1
Element 2
Element 3
Element 4
请注意,CSH使用基于1的索引
不幸的是,正如您所发现的,使用带逗号的括号将产生以下结果:
% foreach i ( $the_array )
foreach? echo $i
foreach? end
Element
1
Element
2
Element
3
Element
4
% set the_array = ('Element 1','Element 2','Element 3','Element 4')
% echo $the_array[1]
Element 1,Element 2,Element 3,Element 4
来源
设置数组={'Element 1'\'Element 2'\'Element 3'\'Element 4'}
(在反斜杠后换行),但是,这会导致“Missing}”错误。不-glob方法没有,但是parens方法有(一定喜欢csh的怪癖)。请参阅上面的示例::-(使用这两种方法可以节省大量的编码。glob方法可以在多行上使用吗?如果可以,如何使用?我尝试了类似于的方法设置数组={'Element 1'\'Element 2'\'Element 3'\'Element 4'}
(在反斜杠后面有换行符),但是,这会导致“Missing}”错误。否-glob方法没有,但parens方法有(一定喜欢csh的怪癖)。请参见上面的示例::-(使用这两种方法可以节省大量的编码。