#!/bin/bash # shellcheck disable=SC2155 if declare -p _global_pragma_once_sign &>/dev/null; then return 0; fi readonly _global_pragma_once_sign=true declare loaded_scripts_map="" # 关联数组不知道为什么有bug pragma_once() { # 1. 转换为绝对路径以确保唯一性 local abs_path abs_path=$(realpath "$1" 2>/dev/null || echo "$1") if [ ! -e "$abs_path" ]; then echo "错误: 文件 '$1' 不存在。" exit 1 fi # 2. 生成 Key(只保留字母数字,其他转下划线) local key="key_$(echo "$abs_path" | sed 's/[^a-zA-Z0-9]/_/g')" # 3. 精确匹配检查 # 我们在 map 的两端和 key 的两端都加上分隔符 | if [[ "$loaded_scripts_map" == *"|$key|"* ]]; then return 1 # 已经加载过了 else # 第一次加载,存入时带上分隔符 # 如果 map 为空,初始化为 |key|;如果不为空,追加 key| if [[ -z "$loaded_scripts_map" ]]; then loaded_scripts_map="|$key|" else loaded_scripts_map="${loaded_scripts_map}${key}|" fi return 0 # 允许加载 fi } # 使用方式 # if pragma_once "${BASH_SOURCE[0]}"; then # fi