Назад | Перейти на главную страницу

Могу ли я получить массив в качестве аргумента опции в сценарии bash

Я пишу сценарий оболочки и хочу передать несколько параметров в аргументе. Возможно ли это сделать, как с помощью getopts?

Пример требования:

./shell.sh -d db1 db2

должен передавать значения db1 и db2 как ценности -d вариант.

Вы можете использовать один вариант несколько раз и собирать результаты в массиве:

./shell.sh -d db1 -d db2

Код:

while getopts "d:" opt
do
  case ${opt} in
    d) dbs+=("$OPTARG");;
  esac
done

Нет. Но вы передаете единственный аргумент, соединенный, например, двоеточием; или цитируется

./shell.sh -d db1:db2 
./shell.sh -d "db1 db2"

В первом случае:

while getopts d: opt; do
    case $opt in
        d) IFS=: read -a dbs <<< "$OPTARG" ;;
    esac
done

Во втором случае (цитируется)

        d) set -f          # turn off filename expansion
           dbs=($OPTARG)   # variable is unquoted
           set +f;;        # turn it back on