[ PROMPT_NODE_25060 ]
解析技术
[ SKILL_DOCUMENTATION ]
# 设置文件解析技术
在 bash 脚本中解析 `.claude/plugin-name.local.md` 文件的完整指南。
## 文件结构
设置文件使用带有 YAML frontmatter 的 markdown:
markdown
---
field1: value1
field2: "带空格的值"
numeric_field: 42
boolean_field: true
list_field: ["item1", "item2", "item3"]
---
# Markdown 内容
此正文内容可以单独提取。
它对于提示词、文档或附加上下文非常有用。
## 解析 Frontmatter
### 提取 Frontmatter 块
bash
#!/bin/bash
FILE=".claude/my-plugin.local.md"
# 提取 --- 标记之间的所有内容(不包括标记本身)
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
**工作原理:**
- `sed -n` - 禁止自动打印
- `/^---$/,/^---$/` - 从第一个 `---` 到第二个 `---` 的范围
- `{ /^---$/d; p; }` - 删除 `---` 行,打印其他所有内容
### 提取单个字段
**字符串字段:**
bash
# 简单值
VALUE=$(echo "$FRONTMATTER" | grep '^field_name:' | sed 's/field_name: *//')
# 带引号的值(移除周围的引号)
VALUE=$(echo "$FRONTMATTER" | grep '^field_name:' | sed 's/field_name: *//' | sed 's/^"(.*)"$/1/')
**布尔字段:**
bash
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//')
# 在条件中使用
if [[ "$ENABLED" == "true" ]]; then
# 已启用
fi
**数字字段:**
bash
MAX=$(echo "$FRONTMATTER" | grep '^max_value:' | sed 's/max_value: *//')
# 验证它是否为数字
if [[ "$MAX" =~ ^[0-9]+$ ]]; then
# 在数字比较中使用
if [[ $MAX -gt 100 ]]; then
# 太大
fi
fi
**列表字段(简单):**
bash
# YAML: list: ["item1", "item2", "item3"]
LIST=$(echo "$FRONTMATTER" | grep '^list:' | sed 's/list: *//')
# 结果: ["item1", "item2", "item3"]
# 用于简单检查:
if [[ "$LIST" == *"item1"* ]]; then
# 列表包含 item1
fi
**列表字段(使用 jq 正确解析):**
bash
# 对于正确的列表处理,使用 yq 或转换为 JSON
# 这需要安装 yq (brew install yq)
# 将列表提取为 JSON 数组
LIST=$(echo "$FRONTMATTER" | yq -o json '.list' 2>/dev/null)
# 遍历项目
echo "$LIST" | jq -r '.[]' | while read -r item; do
echo "正在处理: $item"
done
## 解析 Markdown 正文
### 提取正文内容
bash
#!/bin/bash
FILE=".claude/my-plugin.local.md"
# 提取结束 --- 之后的所有内容
# 计算 --- 标记:第一个是开始,第二个是结束,之后的所有内容都是正文