如何在ksh脚本中判断文件名是否包含指定字符
问题根源
- 你使用的POSIX标准
[单中括号测试语法不支持通配符模式匹配,写的* "$Dir/xyz" *存在语法错误,空格会被识别为独立参数,完全无法匹配目标字符串 - 原写法匹配的是全路径,如果你只需要判断文件名是否包含xyz,还需要先提取文件名部分,避免路径本身带xyz导致误判
解决方法1:使用ksh原生双中括号测试(推荐,语法简洁)
双中括号[[是ksh、bash等shell的内置扩展,原生支持通配符模式匹配,不需要额外加引号,修正后的脚本如下:
#!/bin/ksh # 替换为你的实际目录路径 Dir="/path/to/your/target/dir" for b in "$Dir"/* do # ${b##*/} 作用是提取纯文件名(去掉前面的路径部分) if [[ ${b##*/} == *xyz* ]] then echo "Exist" else echo "Not Exist" fi done
如果你需要匹配全路径(含目录名)是否包含xyz,把判断条件改为[[ $b == *xyz* ]]即可。
解决方法2:使用case语句(兼容性更强,适配所有POSIX shell)
如果你需要脚本兼容更多shell环境,可以用case语句实现模式匹配,写法如下:
#!/bin/ksh Dir="/path/to/your/target/dir" for b in "$Dir"/* do case "${b##*/}" in *xyz*) echo "Exist" ;; *) echo "Not Exist" ;; esac done
内容的提问来源于stack exchange,提问作者Paakiya
相关产品推荐
相关产品推荐

