/ bin / sh Добавление элемента в массив arguments из скрипта - PullRequest
1 голос
/ 12 февраля 2020

Конечная цель

По сути, у меня есть время, когда я oop перебираю каждый аргумент командной строки, передаваемый скрипту, но хочу установить поведение по умолчанию, если аргументы не переданы.

Текущая идея решения

Мой план для этого состоит в том, чтобы проверить, есть ли какие-либо аргументы до этого, пока l oop, и если их нет, просто добавьте аргументы по умолчанию (в данном случае флаги) к массив аргументов и пусть сценарий выполняется оттуда как обычно.

Проблема у меня

Здесь я немного запутался, выясняя синтаксис для добавления этих аргументов по умолчанию к Сам массив аргументов (я могу получить значения из него без проблем).

Это то, что я имею до сих пор:

if test $# -eq 0
then
    # ADD --default TO ARGUMENTS ARRAY HERE
fi

while test $# -gt 0
do
    case "$1" in
  --opt1) DO STUFF
        ;;
  --opt2) DO MORE / OTHER STUFF
        ;;
  --default) DO DEFAULT STUFF
       ;;
    esac
    shift
done

Следуя и изменяя примеры с использованием пользовательских массивов, которые я пробовал:

if test $# -eq 0
then
    $+=('--default')
fi

Но просто получите синтаксическую ошибку

Синтаксическая ошибка рядом с неожиданным токеном `'--default' '

1 Ответ

1 голос
/ 12 февраля 2020

sh не имеет массивов, кроме встроенного списка аргументов командной строки, и, следовательно, нет оператора += для массивов.

Вы также, кажется, пропускаете символ; то, что вы написали, означает присвоение (default) значению переменной $+, но эта переменная недопустима (хотя из-за отсутствия массивов скобки уже вызывают ошибку).

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

if test $# -eq 0
then
    set -- --default
fi

Условие требует, чтобы массив был пустым, поэтому мы просто заполняем его одним предоставленным вами элементом; в общем случае вы можете добавить материал в конец с помощью

set -- "$@" --default

или, соответственно, к началу, поместив что-то перед "$@" (что, конечно, содержит предыдущее значение списка аргументов).

...