$1/$2/$3 - позиционные параметры переданные в скрипт
$# - количество переданных аргументов
$- - текущие флаги оболочки
$$ - идентификатор процесса PID
$_ - последний аргумент предыдущей команды
$IFS - разделение слов во входящих данных
$? - код возврата последней выполненной команды
$! - PID последнего запущенного в фоновом режиме процесса
$0 - имя исполняемого файла
Теперь на примерах
Позиционные параметры
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
Разделение слов во входящих данных
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
А если выполнить из скрипта, то оно покажет его имя.
Вроде всё упомянул, если что-то упустил, добавляйте в комментарии.
tags: #bash
—
💩 @bashdays