我正在修改一套用 tcsh 编写的脚本。不幸的是,这些脚本无法重写,因为它们与之交互的程序也是用 tcsh 编写的。我只是想摆脱这样的想法,即如果我可以用 BASH 或任何其他语言重写这些,我会的。
作为这些脚本的一部分,我们的许多变量都保存在数组中。我的问题是:在 tcsh 中有没有一种方法可以在不使用循环的情况下查询变量的内容是否存在于数组中(无论它在数组中的位置如何)?
例如,我有以下有效 ROI 名称数组:
set shortROI = {"lAmy_","mAmy_","A32p_","A32sg_"}
当用户执行脚本时,他们可以选择使用一个标志来表示他们想要对上述选项中的一个或多个特定ROI 进行重做处理。就像,如果标志是-remake_ROI
,作为调用脚本的一部分,他们只能添加-remake_ROI lAmy
或-remake_ROI lAmy A32p_
重新制作这些 ROI。我有一个非常大的while
循环当前处理所有可能的标志,但此处相关的部分如下所示:
set ac = 1
set redo_rois = 0
set roi_proc_list =
while ( $ac <= $#argv )
foreach roi_opt ( $shortROI )
if ( "$argv[$ac]" == $roi_opt )
@ redo_rois ++
set roi_proc_list = ( $roi_proc_list $roi_opts )
endif
end
@ ac ++
end
ac
是命令行参数计数,redo_rois
是要重新处理的 ROI数量,是roi_proc_list
要重做的实际列表。我想知道是否有类似if ( "$argv[$ac]" == "$shortROI[*]" )
的东西可以完成工作,而不是许多循环。
感谢任何人的帮助。
例子:
如果右侧的变量或列表中的任何单词包含空格,这可能会错误地返回 true。如果您可以决定一个不能出现在任何一侧的字符(例如。
@
),您可以用它替换每个单词中的空格: