You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:15:03