Зм

Змінні у Bash

{one: "1 вправа", few: "%{count} вправи", many: "%{count} вправ", other: "%{count} вправи"}

Про концепцію Змінні

Змінні

У змінних зберігаються дані. Bash має два різновиди даних: рядки тексту (англ. string) і масиви. Про масиви поговоримо пізніше.

Присвоїти змінній значення можна так:

name="value"
Note

Важливо: навколо знака рівності не повинно бути пробілів!

Коли пробіли є, як у цьому прикладі,

x = 10

bash викличе команду x з двома аргументами = і 10!

Змінні також можуть називати параметрами. У цьому документі ми будемо вживати обидва терміни як взаємозамінні.

Ось деякі важливі параметри, які використовує або встановлює bash:

  • PATH - список каталогів, розділених двокрапкою, які використовуються для пошуку зовнішніх команд.
  • IFS - «внутрішній роздільник полів». Як він використовується, побачимо нижче.
  • PWD - поточний робочий каталог. Його значення збігається з виводом команди pwd.
  • RANDOM - псевдовипадкове ціле число від 0 до 32767.
  • BASH_VERSION - рядок тексту з версією запущеного примірника bash.

Назви змінних

Назва змінної складається з великих літер, малих літер, цифр і знака підкреслення. Вона не може починатися з цифри.

Caution

Найкраща практика - уникати назв змінних, написаних усіма великими літерами. Командна оболонка використовує цю домовленість для своїх параметрів, і не варто випадково перезаписувати параметри оболонки, які мають особливе значення. Наприклад: 1, 2, 3

Розкриття параметрів

Значення параметра отримують за допомогою синтаксису $varname.

x=10
echo "The value of x is $x"

Щоб назву змінної не сплутали з навколишнім текстом, її можна взяти у фігурні дужки. Наприклад, щоб надрукувати рядок тексту 10x10:

echo "${x}x$x"
# or
echo "${x}x${x}"

Деякі посібники зі стилю радять у більшості випадків використовувати фігурні дужки для читабельності та (або) однаковості.

Позиційні параметри

Як ми обговорювали в уроці «Команди та аргументи», команди можуть приймати аргументи. Bash-скрипти не виняток. Аргументи поточного примірника bash називаються позиційними параметрами. Їх можна отримати за допомогою таких спеціальних параметрів:

  • $1 - перший позиційний параметр
  • $2 ... $9 - наступні параметри
  • ${10} ... - для двозначних чисел потрібні фігурні дужки.
  • $0 - назва поточного скрипту.

Аргументи функції оболонки - теж позиційні параметри, і поводяться з ними точно так само. Докладніше про функції поговоримо в одному з наступних уроків.

Спеціальні позиційні параметри

Є кілька спеціальних параметрів, які допомагають працювати з позиційними параметрами.

  • $# розкривається в кількість позиційних параметрів.
  • "$@" розкривається у список усіх позиційних параметрів, кожен як окреме слово.
  • "$*" розкривається в один рядок тексту з усіх позиційних параметрів, зʼєднаних одним символом.
    • Символ зʼєднання - перший символ змінної $IFS, який типово дорівнює пробілу.

"$@" - найбезпечніший спосіб передати позиційні параметри іншій команді, зберігши їх надійно залапкованими. Саме його ми будемо використовувати, щоб перебрати позиційні параметри в циклі:

for arg in "$@"; do
    do_something_with "$arg"
done

На практиці "$@" використовують частіше, ніж "$*".

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

Дуже часто в bash-скриптах потрібно перехопити вихідні дані команди й зберегти їх у змінній. Для цього використовують підстановку команд.

var=$(command)

Наприклад, щоб перевести рядок тексту у верхній регістр, можна зробити так:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

Докладніше про розкриття параметрів

Bash має багато вбудованих засобів для роботи зі змінними та рядками тексту, тож не потрібно викликати зовнішні команди.

  • Переведення тексту у верхній регістр. У попередньому розділі ми побачили, як за допомогою tr перевести текст у верхній регістр. Щоб зробити це засобами bash:

    echo "${text^^}"
    

    Так само ${text,,} переводить значення в нижній регістр.

  • Надання типового значення, якщо змінна порожня.

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • Пошук і заміна.

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

Є багато інших цікавих розкриттів параметрів: видобути підрядок, отримати довжину рядка тексту, присвоїти типове значення, прибрати текст на початку чи в кінці значення тощо. Про них можна прочитати в посібнику.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці