gpt4 book ai didi

arrays - csh向数组中添加字符串,空格问题

转载 作者:行者123 更新时间:2023-12-04 14:15:39 24 4
gpt4 key购买 nike

我在用 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 (对于“引用”)扩展修饰符。否则,只要你做类似 set expansionCmdList=($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

关于arrays - csh向数组中添加字符串,空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13149637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com