Результат команд и операторов

Последнее обновление: 23.03.2024

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

Linux позволяет получать и сохранять результат команд и затем использовать его в других командах. Эта функциональность называется "подстановка команды" или command substitution. Для этого команда помещается в косые кавычки. Например, выведем текущую дату в формате "dd.MM.yy":

eugene@Eugene:~$ echo "today is `date +%d.%m.%y`"
today is 22.03.24
eugene@Eugene:~$ 

В данном случае получаем результат команды date +%d.%m.%y, которая форматирует дату, и встраиваем его в строку команды echo

Причем результат команды мы могли бы сохранить в переменную:

eugene@Eugene:~$ TODAY=`date +%d.%m.%y`
eugene@Eugene:~$ echo "today is $TODAY"
today is 22.03.24
eugene@Eugene:~$    

В данном случае сохраняем результат команды date +%d.%m.%y в переменную TODAY

Операторы подстановки

Перед выполнением некоторых действий может потребоваться проверить, действительно ли переменной присвоено некоторое значение. Для этого Bash предлагает операторы подстановки или substitution operators. Например, используя операторы подстановки, можно присвоить значение по умолчанию, если переменной в данный момент присвоено значение. Мы можем использовать следующие операторы подстановки:

  • ${parameter:-value}: показывает значение value, если параметр не определен.

  • ${parameter=value}: присваивает значение value параметру, если параметр вообще не существует. Этот оператор ничего не делает, если параметр существует, но не имеет значения.

  • ${parameter:=value}: присваивает значение value параметру, если этот параметр в данный момент не имеет значения или вообще не существует.

  • ${parameter:?value}: показывает значение value, если параметр не существует или пуст. Использование этой конструкции приведет к немедленному прерыванию сценария оболочки.

  • ${parameter:+value}: показывает значение value, если параметр имеет значение. Если у параметра нет значения, ничего не происходит.

Рассмотрим их применение. Начнем с того, что переменная в принципе может быть не установлена. Например:

eugene@Eugene:~$ echo $NIL

eugene@Eugene:~$ 

Здесь переменная NIL не установлена, а команда echo для этой переменной выводит пустоту. Теперь применим операторы подстановки.

Оператор ${parameter:-value} выводит value, если переменная не установлена:

eugene@Eugene:~$ echo ${NIL:-Variable NIL undefined}
Variable NIL undefined
eugene@Eugene:~$ 

Оператор ${parameter=value} устанавливает для переменной значение value, если эта переменная не установлена:

eugene@Eugene:~$ echo ${NIL=default}
default
eugene@Eugene:~$ 

Оператор ${parameter:=value} присваивает переменной значение value, если переменная в данный момент не имеет значения или вообще не существует. Итак, выше для переменной NIL было установлено значение "default". То есть переменная NIL существует и имеет значение. Применим этот оператор к переменной NIL:

eugene@Eugene:~$ echo ${NIL:=null}
default
eugene@Eugene:~$ NIL=
eugene@Eugene:~$ echo ${NIL:=null}
null
eugene@Eugene:~$ 

Обратите внимание, что вначале NIL имеет значение, поэтому ее значение не изменяется. А после выполнения команды NIL= переменная NIL по прежнему существует, но ее значение не установлено. И затем с помощью оператора := для нее устанавливается значение null.

Оператор ${parameter:?value} показывает значение value, если параметр не существует или пуст.

eugene@Eugene:~$ echo ${NIL:?Variable NIL is undefined}
null
eugene@Eugene:~$ echo ${VOID:?Variable VOID is undefined}
bash: VOID: Variable VOID is undefined
eugene@Eugene:~$ 

Поскольку переменная NIL была установлена ранее в null, оператор к ней применяется. А вот переменная VOID ранее не была установлена, соответственно мы увидим указанное сообщение.

Оператор ${parameter:+value} показывает значение value, если переменная имеет значение:

eugene@Eugene:~$ echo ${NIL:+Variable NIL is defined}
Variable NIL is defined
eugene@Eugene:~$ echo ${VOID:+Variable VOID is defined}

eugene@Eugene:~$ 

Здесь проверяются две переменных - NIL и VOID. Поскольку ранее только NIL была определена, то только для нее отображается указанное сообщение.

И также результат этих операторов можно присваивать переменным:

eugene@Eugene:~$ NIL=null
eugene@Eugene:~$ NIL=${NIL=undefined}
eugene@Eugene:~$ echo $NIL
null
eugene@Eugene:~$ VOID=${VOID=undefined}
eugene@Eugene:~$ echo $VOID
undefined
eugene@Eugene:~$ 

Оператор = устанавливает значение, если переменная вообще не существует. В данном случае, если переменные NIL и VOID НЕ установлены, устанавливаем их значение в "undefined". Однако если эти переменные установлены, то они просто сохраняют свое значение.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850