JDS*_*JDS 6 arrays string shell scripting csh
我在使用csh做一些基本的事情时遇到了麻烦.我有一个字符串:
set newCmd = "$expansionCmd –option1 –option2 …"
Run Code Online (Sandbox Code Playgroud)
我正在创建这些字符串的数组,我后来想要执行它们:
set expansionCmdList = ($expansionCmdList[*] "$newCmd")
#I also tried without quotes, e.g. just $newCmd
Run Code Online (Sandbox Code Playgroud)
最后,我尝试迭代并执行这些命令:
foreach exCmd ($expansionCmdList)
`exCmd` #execute it in the shell
end
Run Code Online (Sandbox Code Playgroud)
但是问题是数组条目不是完整的字符串,而是用空格分隔的字符串的每个部分,即第一个条目只是"$ 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
Run Code Online (Sandbox Code Playgroud)
哎呀,你甚至在进入执行循环之前搞砸了数组.事情变得更好:q:
% set a = ( a "b c" d )
% set a = ( $a:q e )
% echo $a[2]
b c
Run Code Online (Sandbox Code Playgroud)
您需要在for循环中使用相同的修饰符:
foreach exCmd ($expansionCmdList:q)
Run Code Online (Sandbox Code Playgroud)
最后,` `exCmd``尝试运行一个名为"exCmd"的命令.你想要做的是运行变量的值.你可能会遇到更多的空白问题,你不能通过使每个命令成为一个数组来解决它们,因为csh不支持数组数组.公平的警告.但如果命令没有任何报价需求,这将有效:
$exCmd
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10851 次 |
| 最近记录: |