Проблемы с чтением второго аргумента в скрипте bash - PullRequest
0 голосов
/ 16 октября 2018

Мне нужно передать аргумент для функции коммита.Когда я делаю коммит через

./test.sh commit -m "first" 

, это не совсем его коммит.Поверьте, почему-то я не передаю правильный параметр аргумента в случае или функции.

Вот сценарий

#!/usr/bin/env bash

clone () {
  git clone $1
}

commit () {
  git commit $*
}

case $1
in
   clone) clone $2 ;;
   commit) commit $2 ;;

       *) echo "Invalid Argument passed" ;;
esac

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Для безопасной поддержки нескольких аргументов (включая аргументы со специальными символами) телами функций должны быть

git clone "$@"

и

git commit "$@"

.

По тем же причинамкод case должен иметь следующий вид:

case $1 in
    clone)  clone "${@:2}" ;;
    commit) commit "${@:2}" ;;
    *)      echo "Invalid Argument passed" ;;
esac

В функциях "$@" распространяется на все аргументы функции, безопасно заключенные в кавычки, поэтому они не подлежат разделению или расширению слов.

В операторе case ${@:2} расширяется до списка аргументов командной строки после первого, благополучно заключенного в кавычки.

Для получения дополнительной информации см. Обработка позиционных параметров [Bash Hackers Wiki] .

0 голосов
/ 16 октября 2018

Аргументы обрабатываются bash следующим образом:

./test.sh commit -m "first" 

0: ./test.sh
1: commit
2: -m
3: first

Таким образом, ваш "first" на самом деле является аргументом $3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...