Привет. В прошлом посте мы с тобой познакомились с $@ и $*. Сегодня разберем остатки этих прекрасных баксовых штуковин.

Теперь на примерах

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

echo "Первый аргумент: $1"
echo "Второй аргумент: $2"
echo "Третий аргумент: $3"

./script.sh one two three

Выведет:

Первый аргумент: one
Второй аргумент: two
Третий аргумент: three

Количество переданных аргументов

echo "Количество аргументов: $#"

./script.sh one two three

Выведет:

Количество аргументов: 3

Текущие флаги оболочки

echo "Текущие флаги оболочки: $-"

Выведет:

Текущие флаги оболочки: himBHs

Про эти флаги можешь почитать в этом посте.

Идентификатор процесса PID

echo "PID текущей оболочки: $$"

Выведет:

PID текущей оболочки: 362748

Последний аргумент предыдущей команды

echo "Hello BashDays"
echo "Welcome Home"
echo "Последний аргумент предыдущей команды: $_"

Выведет:

Последний аргумент предыдущей команды: Welcome Home
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
По умолчанию у $IFS это пробел, но можно заменить на что-то другое.

Разделение слов во входящих данных

IFS=","
read -ra words <<< "hello,bashdays,how,are,you"
for word in "${words[@]}"; do
    echo "Слово: $word"
done

По умолчанию у $IFS это пробел, но можно заменить на что-то другое. Тут указываем, что разделитель у нас будет «запятая».

Вывод будет таким:

Слово: hello
Слово: bashdays
Слово: how
Слово: are
Слово: you

Код возврата последней выполненной команды

ls non_existent_file.txt
echo "Код возврата: $?"

Выведется:

ls: cannot access 'non_existent_file.txt': No such file or directory
Код возврата: 2

PID последнего запущенного в фоновом режиме процесса

sleep 10 &
echo "PID последнего запущенного в фоновом режиме: $!"

Выведет:

PID последнего запущенного в фоновом режиме: 362786

Имя исполняемого файла

echo "Имя этого скрипта: $0"

Выведет:

Имя этого скрипта: -bash

А если выполнить из скрипта, то оно покажет его имя.

Вроде всё упомянул, если что-то упустил, добавляйте в комментарии.