加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – Csh向数组添加字符串,空白麻烦

发布时间:2020-12-15 18:57:57 所属栏目:安全 来源:网络整理
导读:我在使用csh做一些基本的事情时遇到了麻烦.我有一个字符串: set newCmd = "$expansionCmd –option1 –option2 …" 我正在创建这些字符串的数组,我后来想要执行它们: set expansionCmdList = ($expansionCmdList[*] "$newCmd") #I also tried without quot
我在使用csh做一些基本的事情时遇到了麻烦.我有一个字符串:
set newCmd = "$expansionCmd –option1 –option2 …"

我正在创建这些字符串的数组,我后来想要执行它们:

set expansionCmdList = ($expansionCmdList[*] "$newCmd")   
#I also tried without quotes,e.g. just $newCmd

最后我尝试迭代并执行这些命令:

foreach exCmd ($expansionCmdList) 
    `exCmd`    #execute it in the shell
end

但是问题是数组条目不是完整的字符串,而是字符串的每个部分用空格分隔,即第一个条目只是“$expansionCmd”,下一个条目是“-option1”等.

为使用c shell提前道歉,我公司的代码库坚持使用它.

无论何时扩展整个数组并希望保持其各个元素的身份完整,您需要在扩展上使用:q修饰符.否则,只要执行类似设置expandCmdList =($expansionCmdList [*]“$newCmd”)的操作,列表中的所有先前命令就会被拆分为它们的组件字,每个组件字现在都是它自己的数组元素.简单演示:
% set a = ( a "b c" d )
% echo $a[2]
b c
% set a = ( $a[*] e )
% echo $a[2]
b

糟糕,你甚至在进入执行循环之前搞砸了数组.事情变得更好:q:

% set a = ( a "b c" d )
% set a = ( $a:q e )
% echo $a[2]
b c

您需要在for循环中使用相同的修饰符:

foreach exCmd ($expansionCmdList:q)

最后,`exCmd`尝试运行一个名为“exCmd”的命令.你想做的是
运行变量的值.你可能会遇到更多的空白问题,你不能通过使每个命令成为一个数组来解决它们,因为csh不支持数组数组.公平的警告.但如果命令没有任何报价需求,这将有效:

$exCmd

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读