Захват всех параметров командной строки

В некоторых случаях нужно захватить все параметры, переданные скрипту. Для этого можно воспользоваться переменными $* и $@. Обе они содержат все параметры командной строки, что делает возможным доступ к тому, что передано сценарию, без использования позиционных параметров.

Переменная $* содержит все параметры, введённые в командной строке, в виде единого «слова».

В переменной $@ параметры разбиты на отдельные «слова». Эти параметры можно перебирать в циклах.

Рассмотрим разницу между этими переменными на примерах. Сначала взглянем на их содержимое:

#!/bin/bash

echo "Using the $* method: $*"

echo "-----------"

echo "Using the $@ method: $@"

Вот вывод скрипта.

Переменные $* и $@

Как видно, при выводе обеих переменных получается одно и то же. Теперь попробуем пройтись по содержимому этих переменных в циклах для того, чтобы увидеть разницу между ними:

#!/bin/bash

count=1

for param in "$*"

do

echo "$* Parameter #$count = $param"

count=$(( $count + 1 ))

done

count=1

for param in "$@"

do

echo "$@ Parameter #$count = $param"

count=$(( $count + 1 ))

done

Взгляните на то, что скрипт вывел в консоль. Разница между переменными вполне очевидна.

Разбор переменных $* и $@ в цикле

Переменная $* содержит все переданные скрипту параметры как единый фрагмент данных, в то время как в переменной $@ они представлены самостоятельными значениями. Какой именно переменной воспользоваться — зависит от того, что именно нужно в конкретном сценарии.

Лето — время эзотерики и психологии! ☀️

Получи книгу в подарок из специальной подборки по эзотерике и психологии. И скидку 20% на все книги Литрес

ПОЛУЧИТЬ СКИДКУ