【发布时间】:2017-07-04 19:31:11
【问题描述】:
尝试在带有通配符 * 的目录中查找文件,并将名称放入数组中
文件名称相似(MATCHr1、MATCHr2 ...)
文件不存在时会出现问题(有可能)
set 命令返回“不匹配”错误并终止循环
如果发生这种情况,我怎样才能让它通过跳转到下一次迭代来处理错误?
set SUBIDS = (10003 10005 10006)
foreach SUBID ($SUBIDS)
foreach SEQR ( MATCH ENC NBACK SIMON FACE )
ls -l *${SEQR}*.nii.gz
set Array = *${SEQR}*.nii.gz
echo $Array[*]
....其余代码使用 Array 的内容来创建文本文件
当*${SEQR}*.nii.gz 返回文件名时效果很好
但是当没有与通配符匹配时失败
任何帮助将不胜感激
谢谢!
【问题讨论】:
-
在定义数组大小后尝试添加检查 (
if #$Array >0) -
在哪里?
ls -l *${SEQR}*.nii.gz返回:不匹配但允许代码继续到set Array = *${SEQR}*.nii.gz也返回不匹配但脚本退出并且不会继续下一个SEQR -
您可以执行 ls 并检查 $status(或 $STATUS,取决于您的系统)标志:
ls -l *${SEQR}*.nii.gz >> /dev/null ; if !$status then ...我现在不在我的机器旁边检查确切的语法,但那是它的精神...... -
做到了!
ls -l *${SEQR}*.nii.gz >> /dev/null# compensate for no match errorset checkme = $status# if return goodif ( $checkme == 0 ) then ....谢谢! -
我正在将我的答案转换为官方答案,以便您可以关闭问题。
标签: arrays set glob csh no-match