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

脚本中赋值find+grep筛选的目录结果为空,命令行执行正常

解决命令赋值后变量为空的问题

我来帮你排查下这个问题,你遇到的变量赋值后为空的情况,大概率是命令里的几个语法错误导致的,咱们一步步拆解修复:

首先看命令里的几个明显错误:

  • 命令替换语法错误:你写的$ (中间多了个空格!shell里命令替换的正确写法是$(...),空格会让shell把$和(当成两个独立的元素,直接导致赋值失败,变量自然为空。
  • find参数错误:-type -d是错的,-type选项后面直接跟文件类型标识,应该写成-type d(没有额外的横杠)。
  • 变量引用与管道语法错误:${EX_PATTERN|这里明显没写完,变量引用需要闭合的},而且管道符|的位置应该在第一个grep命令结束后,正确的管道链是find ... | grep -Eiv "${EX_PATTERN}" | grep -Eio "${FIND_PATTERN}"。
  • 变量未加引号的隐患:如果FIND_ROOT、EX_PATTERN这些变量包含空格或特殊字符,不加双引号会让shell解析出错,所以一定要给变量加上双引号。

修复后的完整命令:

GET_DIR=$(find "${FIND_ROOT}" -type d 2>/dev/null | grep -Eiv "${EX_PATTERN}" | grep -Eio "${FIND_PATTERN}")

额外排查技巧:

如果修复后变量还是为空,可以分步执行命令来定位问题:

  1. 先单独执行find "${FIND_ROOT}" -type d 2>/dev/null,确认有没有输出目录列表;
  2. 加上第一个grep:find ... | grep -Eiv "${EX_PATTERN}",看排除后的结果是否符合预期;
  3. 最后加上第二个grep,检查FIND_PATTERN的正则是否能匹配到前面的结果(毕竟grep -o只输出匹配的部分,如果正则不对也会返回空)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:46:09