问题描述
我想检查一个特定的字符串是否在文件名(这是一个变量)中。 [在 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 外壳。