Arrays 如何将csh数组元素与空格以外的内容分开?

Arrays 如何将csh数组元素与空格以外的内容分开?,arrays,csh,separator,Arrays,Csh,Separator,在我正在处理的csh脚本中,我需要有包含空格的数组元素,所以我需要用空格以外的东西来分隔这些元素,比如逗号。例如,我想用以下内容初始化数组: set the_array=('Element 1','Element 2','Element 3','Element 4') 注:我很清楚在csh工作是多么不可取。然而,对于这个项目,我没有选择。。。是的,我试图说服powers,这应该改变,但是已经有一个很大的代码库需要重新编写,所以被拒绝了。在CSH中初始化字符串数组(其中有空格)有两种方法: 第一

在我正在处理的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
      
      来源


      glob方法能否在多条线路上使用?如果是,怎么做?我尝试过类似的
      设置数组={'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的怪癖)。请参见上面的示例::-(使用这两种方法可以节省大量的编码。