Unix / Linux - Подстановки в shell
Здравствуйте,野心勃勃的程序设计者们! Сегодня мы окунёмся в fascinирующий мир подстановок в Unix и Linux shell. Не волнуйтесь, если вы новички в программировании – я passo passo буду вести вас через эту тему, как я делал это для countless студентов на протяжении многих лет моего преподавания. Так что, отправляемся в это увлекательное путешествие вместе!
Что такое подстановка?
Прежде чем мы углубимся в details, давайте поймём, что означает подстановка в контексте shell-программирования.
Подстановка resembles магический трюк в shell. Это когда shell заменяет одну часть текста другой перед выполнением команды. Представьте, что вы готовите торт, и рецепт требует "1 стакан сахара". Но у вас нет сахара! Так что вы решаете использовать мёд вместо него. Вот что делает подстановка – она заменяет один ингредиент (или в нашем случае, часть текста) другим.
В shell-программировании у нас есть три основные типа подстановок:
- Подстановка команды
- Подстановка переменной
- Арифметическая подстановка
Мы сосредоточимся на первых двух в этом руководстве. Давайте начнём с подстановки команды!
Подстановка команды
Что такое подстановка команды?
Подстановка команды – это функция, которая позволяет вам использовать вывод одной команды в качестве аргумента для другой команды. Это как если бы у вас был помощник, который выполняет команду за вас и затем шепчет вам результат на ухо, который вы затем можете использовать в своей основной команде.
Как выполнить подстановку команды?
Существует два способа выполнения подстановки команды:
- Использование обратных кавычек (`)
- Использование синтаксиса $() (предпочитаемый метод)
Давайте рассмотрим несколько примеров, чтобы лучше понять это.
Пример 1: Использование обратных кавычек
current_date=`date`
echo "Today's date is: $current_date"
Когда вы выполните этот скрипт, он выведет что-то вроде:
Today's date is: Mon May 15 10:30:45 EDT 2023
Что здесь произошло? Shell выполнил команду date
, захватил её вывод и затем использовал этот вывод в качестве значения для переменной current_date
.
Пример 2: Использование синтаксиса $()
files_count=$(ls | wc -l)
echo "There are $files_count files in the current directory."
Этот скрипт посчитает количество файлов в текущем каталоге и выведет что-то вроде:
There are 15 files in the current directory.
В этом примере shell сначала выполняет команду ls
для列出 всех файлов, передаёт этот вывод в wc -l
для подсчёта строк и затем присваивает результат переменной files_count
.
Why Use Command Substitution?
Подстановка команды невероятно полезна, когда вам нужно использовать результат команды в составе другой команды или присвоить его переменной. Это как если бы у вас был швейцарский армейский нож в вашем наборе инструментов для программирования!
Подстановка переменной
Теперь перейдём к подстановке переменной. Это ещё одна мощная функция, которая позволяет вам использовать значение переменной в ваших скриптах.
Что такое подстановка переменной?
Подстановка переменной – это когда shell заменяет имя переменной на её значение. Это как если бы у кого-то было прозвище – когда вы используете это прозвище, все знают, что вы имеете в виду этого человека.
Как выполнить подстановку переменной?
Чтобы выполнить подстановку переменной, вы просто используете имя переменной, preceded by a dollar sign ($).
Пример 1: Основная подстановка переменной
name="Alice"
echo "Hello, $name!"
Вывод:
Hello, Alice!
Здесь shell заменил $name
на его значение, "Alice".
Пример 2: Использование фигурных скобок
Иногда вам нужно использовать фигурные скобки {}, чтобы чётко определить, где заканчивается имя переменной.
fruit="apple"
echo "I like ${fruit}s"
Вывод:
I like apples
Без фигурных скобок shell искал переменную с именем fruits
, которая не существует.
Advanced Variable Substitution Techniques
Давайте рассмотрим некоторые более продвинутые техники:
1. Значения по умолчанию
Вы можете указать значение по умолчанию для переменной, если она не установлена:
echo "Hello, ${name:-World}!"
Если name
не установлен, он выведет:
Hello, World!
2. Присваивание значения по умолчанию
Вы можете присвоить значение по умолчанию переменной, если она не установлена:
echo "Hello, ${name:=World}!"
echo $name
Вывод:
Hello, World!
World
3. Отображение ошибки, если переменная не установлена
Вы можете отобразить сообщение об ошибке, если переменная не установлена:
echo "Hello, ${name:?'Name is not set'}"
Если name
не установлен, он выведет ошибку:
bash: name: Name is not set
Вот таблица, резюмирующая эти продвинутые техники:
Синтаксис | Описание | Пример |
---|---|---|
${var:-word} | Если var null или не установлен, подставляется word. | ${name:-World} |
${var:=word} | Если var null или не установлен, var устанавливается в word. | ${name:=World} |
${var:?message} | Если var null или не установлен, сообщение выводится в stderr. | ${name:?'Name is not set'} |
${var:+word} | Если var установлен, подставляется word. В противном случае, ничего не подставляется. | ${name:+Hello} |
Remember, practice makes perfect! Не бойтесь экспериментировать с этими подстановками в своих собственных скриптах. Это как учиться ездить на велосипеде – сначала это может показаться сложным, но как только вы научитесь, вы будетеzooming вокруг в кратчайшие сроки!
В заключение, подстановки в shell – это мощные инструменты, которые могут сделать ваши скрипты более динамичными и гибкими. Они позволяют вам использовать вывод команд и значения переменных в различных способах. По мере того как вы продолжаете своё путешествие в shell-программировании, вы будете всё больше и больше использовать эти техники.
Счастливо программируйте и помните – в мире программирования, любопытство – ваш лучший друг!
Credits: Image by storyset