Я хочу написать скрипт updategit.sh для Unix / Linux с параметром по умолчанию для фиксации в git. updategit.sh должен быть POSIX-совместимым. Я надеюсь, что POSIX решит некоторые из худших несовместимостей оболочек Unix / Linux.

Синтаксис: updategit.sh {$1}

{$1} означает, что параметр $1 является необязательным.

1) Если в updategit.sh параметры не передаются, последним действием в сценарии должно быть:

git commit -m 'Patches #1023, #1016.4 .. .17 reapplied. See e-mail from Paul (paul@sh.ts) send at 2016-01-26 08:56'

Достаточно ли передать его в одинарных кавычках, если в тексте нет ни одной кавычки?

2) Должна быть возможность передать необязательный параметр $1 в updategit.sh . Естественный синтаксис заключался бы в том, чтобы заключить параметр в двойные кавычки. Я думаю, что это будет невозможно. Я хочу иметь возможность получить как можно больше updategit.sh без разрушения оболочки входным параметром и сбоя команды из-за того, что оболочка не работает с вводом.

Естественный синтаксис будет примерно таким:

$ ./updategit.sh "New template GetShape()"
$ ./updategit.sh "Patch #312.5 applied. See Eve's email (eve@stoneage.nix) from 2016-02.29 09:43"
$ ./updategit.sh "Round to .5 fixed"
$ ./updategit.sh

Понятно, что оболочка будет портить ввод. Насколько близко я мог прийти к "естественному" синтаксису без неудачного выполнения git commit -m $1 ? AFAIK команда git commit -m $1 должна быть переписана во что-то более устойчивое.

1 ответ1

1

Технически все аргументы скриптов оболочки являются необязательными. Сценарий должен определить, отсутствуют ли аргументы и что с этим делать. Это можно сделать несколькими способами в зависимости от ваших потребностей. Для сценария, который имеет только один аргумент, который является необязательным, что-то вроде этого будет работать:

#!/usr/bin/env sh
if [ ${#1} -eq 0 ]
then
    git commit -m "default message"
else
    git commit -m "$1"
fi

Это проверяет, равна ли длина первого аргумента нулю, и действует соответственно. Если первый аргумент отсутствует, он считается имеющим нулевую длину. Вы также можете проверить количество аргументов, сравнив их с $# .

Укороченный вариант приведенного выше сценария, который использует замену пустого аргумента:

#!/usr/bin/env sh
git commit -m "${1:-default message}"

Подобные вещи описаны здесь в разделе «2.6.2 Расширение параметров».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .