В shell-скриптах часто используют переменные в командах:
rm -rf $TARGET
На вид обычная строка, но без кавычек shell сначала выполнит word splitting и glob expansion. Если в переменной есть пробелы, значение превратится в несколько аргументов.
Например:
TARGET="/tmp/app cache"
printf '<%s>\n' $TARGET
Вывод будет не одним путём, а двумя словами:
</tmp/app>
<cache>
Правильный вариант почти всегда брать переменную в кавычки:
printf '<%s>\n' "$TARGET"
Теперь значение передаётся как один аргумент:
</tmp/app cache>
То же самое касается путей, имён файлов, URL и пользовательского ввода:
cp "$SOURCE" "$DEST"
grep "$PATTERN" "$LOG_FILE"
mkdir -p "$APP_DIR"
Есть редкие случаи, когда разбиение по словам нужно специально, но в обычных скриптах это скорее исключение.
Для списков лучше использовать массивы:
files=("app log.txt" "error log.txt")
printf '%s\n' "${files[@]}"В shell кавычки вокруг переменных это не косметика. Они защищают скрипт от пробелов, спецсимволов и случайного выполнения команды не с теми аргументами.
➡️ DevOps Ready | #практика
