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

grep结果无法存入变量:提取文件名日期存变量后输出为空

问题分析与解决

你的问题核心是误将文件名当作命令执行,而不是输出文件名的文本内容传递给grep,导致没有匹配结果存入变量。

错误原因拆解

在你的错误代码中:

result=$($filename |grep -Eo '[[:digit:]]{14}')

$filename会被解析为具体的文件名(比如OH/file20240520123456.txt),直接这样写相当于尝试执行这个文件名作为系统命令——但显然文件名不是可执行命令,所以这条管道命令没有输出,最终result变量就是空值。

修正后的代码

你需要用echo命令输出文件名,再通过管道传递给grep,同时建议给$filename加上双引号(避免文件名包含空格时出错):

for filename in OH/*; do
    result=$(echo "$filename" | grep -Eo '[[:digit:]]{14}')
    echo "$result"
done

额外优化建议

如果想更高效(避免调用外部grep命令),可以用Bash内置的正则匹配功能:

for filename in OH/*; do
    if [[ "$filename" =~ ([0-9]{14}) ]]; then
        result="${BASH_REMATCH[1]}"
        echo "$result"
    fi
done

这种方式完全依赖Bash内置功能,执行速度更快,也更灵活。

内容的提问来源于stack exchange,提问作者LaaKii

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:18:58