У змінних зберігаються дані. Bash має два різновиди даних: рядки тексту (англ. string) і масиви. Про масиви поговоримо пізніше.
Присвоїти змінній значення можна так:
name="value"
Важливо: навколо знака рівності не повинно бути пробілів!
Коли пробіли є, як у цьому прикладі,
x = 10
bash викличе команду x з двома аргументами = і 10!
Змінні також можуть називати параметрами. У цьому документі ми будемо вживати обидва терміни як взаємозамінні.
Ось деякі важливі параметри, які використовує або встановлює bash:
PATH - список каталогів, розділених двокрапкою, які використовуються для пошуку зовнішніх команд.IFS - «внутрішній роздільник полів».
Як він використовується, побачимо нижче.PWD - поточний робочий каталог.
Його значення збігається з виводом команди pwd.RANDOM - псевдовипадкове ціле число від 0 до 32767.BASH_VERSION - рядок тексту з версією запущеного примірника bash.Назва змінної складається з великих літер, малих літер, цифр і знака підкреслення. Вона не може починатися з цифри.
Значення параметра отримують за допомогою синтаксису $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!"
Є багато інших цікавих розкриттів параметрів: видобути підрядок, отримати довжину рядка тексту, присвоїти типове значення, прибрати текст на початку чи в кінці значення тощо. Про них можна прочитати в посібнику.