【问题标题】:csh set: no match error wildcardcsh 集:没有匹配错误通配符
【发布时间】: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


【解决方案1】:

您可以执行 ls 并检查 $status(或 $STATUS,取决于您的系统)标志:
ls -l *${SEQR}*.nii.gz >> /dev/null ; if !$status then ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-13
    • 2017-09-26
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多