Unix / Linux - Подстановки в shell

Здравствуйте,野心勃勃的程序设计者们! Сегодня мы окунёмся в fascinирующий мир подстановок в Unix и Linux shell. Не волнуйтесь, если вы новички в программировании – я passo passo буду вести вас через эту тему, как я делал это для countless студентов на протяжении многих лет моего преподавания. Так что, отправляемся в это увлекательное путешествие вместе!

Unix / Linux - Shell Substitutions

Что такое подстановка?

Прежде чем мы углубимся в details, давайте поймём, что означает подстановка в контексте shell-программирования.

Подстановка resembles магический трюк в shell. Это когда shell заменяет одну часть текста другой перед выполнением команды. Представьте, что вы готовите торт, и рецепт требует "1 стакан сахара". Но у вас нет сахара! Так что вы решаете использовать мёд вместо него. Вот что делает подстановка – она заменяет один ингредиент (или в нашем случае, часть текста) другим.

В shell-программировании у нас есть три основные типа подстановок:

  1. Подстановка команды
  2. Подстановка переменной
  3. Арифметическая подстановка

Мы сосредоточимся на первых двух в этом руководстве. Давайте начнём с подстановки команды!

Подстановка команды

Что такое подстановка команды?

Подстановка команды – это функция, которая позволяет вам использовать вывод одной команды в качестве аргумента для другой команды. Это как если бы у вас был помощник, который выполняет команду за вас и затем шепчет вам результат на ухо, который вы затем можете использовать в своей основной команде.

Как выполнить подстановку команды?

Существует два способа выполнения подстановки команды:

  1. Использование обратных кавычек (`)
  2. Использование синтаксиса $() (предпочитаемый метод)

Давайте рассмотрим несколько примеров, чтобы лучше понять это.

Пример 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