Хранение переданных аргументов в отдельных переменных

В моем скрипте "script.sh" я хочу сохранить 1-й и 2-й аргумент для некоторой переменной, а затем сохранить остальные в другой отдельной переменной. Какую команду я должен использовать для реализации этой задачи? Обратите внимание, что количество аргументов, передаваемых скрипту, будет различным.

Когда я запускаю команду в консоли

./script.sh abc def ghi jkl mn o p qrs xxx   #It can have any number of arguments

В этом случае я хочу, чтобы мой сценарий хранил "abc" и "def" в одной переменной. "ghi jkl mn o p qrs xxx" должен храниться в другой переменной.

3 ответа

Если вы просто хотите объединить аргументы:

#!/bin/sh

first_two="$1 $2"  # Store the first two arguments
shift              # Discard the first argument
shift              # Discard the 2nd argument
remainder="$*"     # Store the remaining arguments

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

#!/bin/sh

first_two="$1 $2"  # Store the first two arguments
a="$1"; b="$2"     # Store the first two argument separately
shift              # Discard the first argument
shift              # Discard the 2nd argument
remainder="$*"     # Store the remaining arguments
set "$a" "$b" "$@" # Restore the positional arguments

Нарезать $@ массив.

var1=("${@:1:2}")
var2=("${@:3}")

Храните все аргументы в таблице

  vars=("$@")

  echo "${vars[10]}"
Другие вопросы по тегам