Доработка. Добавлен скрипт для проверки неуместного использования двойных кавычек

This commit is contained in:
sasha80
2026-01-21 09:34:16 +03:00
parent 6796d17b30
commit dd6393753c

72
check.sh Normal file
View File

@@ -0,0 +1,72 @@
#!/usr/bin/env bash
if [ -z "$1" ]; then
echo "Использование: $0 <папка_для_поиска>"
exit 1
fi
TARGET_DIR="$1"
if [ ! -d "$TARGET_DIR" ]; then
echo "Ошибка: папка '$TARGET_DIR' не существует!"
exit 1
fi
echo "Поиск строк в двойных кавычках в файлах .gd (исключая комментарии)..."
echo "Папка: $TARGET_DIR"
echo "=========================================="
FOUND_MATCHES=0
# Используем Process Substitution вместо пайплайна в цикле
while IFS= read -r file; do
# Используем awk для поиска строк с кавычками, исключая комментарии
# и экранированные кавычки
MATCHES=$(awk '
BEGIN { line_num = 0 }
{
line_num++
original_line = $0
line = $0
# Ищем первый #, который не находится внутри кавычек
in_quote = 0
for (i = 1; i <= length(line); i++) {
char = substr(line, i, 1)
prev_char = substr(line, i-1, 1)
# Если находим неэкранированную кавычку, меняем состояние
if (char == "\"" && prev_char != "\\") {
in_quote = !in_quote
}
# Если находим # вне кавычек, обрезаем строку до этого места
if (char == "#" && !in_quote) {
line = substr(line, 1, i-1)
break
}
}
# Удаляем начальные и конечные пробелы
gsub(/^[[:space:]]+|[[:space:]]+$/, "", line)
# Ищем непустые строки с двойными кавычками
if (line ~ /"[^"\\]*"/) {
print line_num ": " original_line
}
}
' "$file")
if [ -n "$MATCHES" ]; then
FOUND_MATCHES=1
echo "Файл: $file"
echo "$MATCHES" | while IFS= read -r match_line; do
echo " Строка $match_line"
done
echo ""
fi
done < <(find "$TARGET_DIR" -type f -name "*.gd")
if [ "$FOUND_MATCHES" -eq 0 ]; then
echo "Совпадений не найдено."
fi