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

前端之家收集整理的这篇文章主要介绍了数组 – Csh向数组添加字符串,空白麻烦前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在使用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

猜你在找的Bash相关文章