如何解决csh/tcsh 如何查找特定字符串是否在变量/文件名中?
我想检查一个特定的字符串是否在文件名(这是一个变量)中。 [在 csh/tcsh]
#!/bin/tcsh
set file = 'KZ.KKAR..BHZ.2008-01-18T19-16-51.SAC'
set string = 'BHZ'
echo $file
if [[$file == *$string*]];then
echo 'string contains in this'
else
echo "NOOOOOOOOO"
endif
类似的东西。 要么 如果可能,在一行代码中
解决方法
您可以使用 =~
来匹配 glob 模式:
if ( $file =~ *$string* ) then
注意 [[..]]; then
不是有效的 (t)csh 语法;这仅适用于 Bourne shell。
这在 man tcsh
中有记录:
'==' '!=' '=~' 和 '!~' 运算符将它们的参数作为字符串进行比较;全部 其他人对数字进行操作。运算符 '=~' 和 '!~' 类似于 '!=' 和 '==' 除了右手边是一个全局模式(参见文件名替换) 左手操作数与之匹配。这减少了使用的需要 当真正需要所有这些时,shell 脚本中的 switch 内置命令 是模式匹配。
正如文档中提到的,switch
也可以使用 glob 模式,类似于
Bourne 外壳。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。