Нежных много, деловых мало. Ну не могу я из песни слов выбросить, получится сухо и неинтересно.
Поэтому нарушать традиций не будем, продолжаем в том же ключе. А нежные пусть идут на… ну ты понял.
Рассмотрим распространённый случай:
echo $foo
Тут всё предельно ясно и понятно. Всё в ажуре!
Но это вершина айсберга. Эта команда может отрабатывать не так, как ты ожидаешь. Потому что foo — это переменная. И если ты её не возьмёшь в кавычки, то Bash может сделать с её содержимым всякие хитрые штуки.
Что подразумевается под «хитрыми штуками»
- Разделить содержимое на отдельные слова (если там есть пробелы).
- Подставить имена файлов с таким шаблоном, если он выглядит как
*.zip(это называется глоббинг).
И тут у новичков возникает многочасовой проёб, когда переменная выводит неправильные значения.
Смотри:
msg="Пожалуйста, введите имя файла в формате *.zip"
echo $msg
Выглядит опять всё красиво. А по факту получаешь:
Пожалуйста, введите имя файла в формате awscliv2.zip
Да блядь! А я просто хотел вывести строкой *.zip, а не получить список файлов в текущей папке.
var="*.zip"
echo "$var"
echo $var
echo напечатает *.zip, а второе выведет список всех файлов, которые заканчиваются на .zip.Поэтому, если ты хочешь наверняка вывести переменную как есть, лучше используй printf:
printf "%s\n" "$foo"
Для маленьких:
Представь, что ты говоришь падшей женщине: «покажи, что у тебя в трусах», она снимает трусы, а там — большой сочный хуй.
А чтобы в трусах был ожидаемый результат, нужно изначально это учесть в моменте знакомства (до просьбы) и расставить все кавычки.
Хотя у каждого свой ожидаемый результат… возможно, кавычки вовсе и не потребуются.
Такие дела. Изучай!








Комментарии