сценарий оболочки внутренний против внешних аргументов - PullRequest
0 голосов
/ 28 января 2020

Я унаследовал сценарий оболочки «myScript. sh», который я хочу параметризировать. Внутри скрипта есть функция, подобная этой:

function hmac_sha256 {
  key="$1"
  data="$2"
  printf "${data}" | openssl dgst -sha256 -mac HMAC -macopt "${key}" | \
      sed 's/^.* //'
}

Теперь, когда я хочу вызвать общий скрипт в моем терминале, я делаю

/.myScript arg1 arg2 etc

Эти аргументы, для моего ограниченного знания, по умолчанию представлены соответствующими '$ 1', '$ 2' и т. д. c. Я использую эти аргументы в другом месте скрипта, а НЕ в качестве аргументов для этой специфической c функции.

Однако эти самые $ 1 и $ 2 уже используются в функции выше.

Вопрос в том, я думаю: как мне отличить guish между «внешними» и «внутренними» аргументами?

1 Ответ

1 голос
/ 29 января 2020

Наиболее переносимым способом для разных оболочек было бы присвоение аргументов сценария глобальным переменным.

ARG1="$1"
ARG2="$2"
echo "My arguments $ARG1 $ARG2"

Для большинства современных оболочек также существует ярлык (по крайней мере bash, zsh, k sh), которые поддерживают массивы. Имейте в виду, что строгие оболочки POSIX не имеют массивов, поэтому в них это не сработает. Вы можете присвоить массиву $@ и получить доступ к этому массиву вместо этого следующим образом:

ARGV=("$@")
# arguments in ARGV array will be shifted - $1 on index 0, $2 on index 1, etc..
echo "My arguments ${ARGV[0]} ${ARGV[1]}"

Наконец, если у вас все в порядке с непереносимым скриптом bash, вы можете использовать массив BASH_ARGV.

echo "My arguments ${BASH_ARGV[1]} ${BASH_ARGV[0]}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...