Я могу получить массив как аргумент опции в сценарии удара

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

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

./shell.sh -d db1 db2

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

4
задан 27 March 2015 в 00:50
2 ответа

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

./shell.sh -d db1 -d db2

Код:

while getopts "d:" opt
do
  case ${opt} in
    d) dbs+=("$OPTARG");;
  esac
done
4
ответ дан 3 December 2019 в 03:29

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

./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
0
ответ дан 3 December 2019 в 03:29

Теги

Похожие вопросы