Для безопасной поддержки нескольких аргументов (включая аргументы со специальными символами) телами функций должны быть
git clone "$@"
и
git commit "$@"
.
По тем же причинамкод case
должен иметь следующий вид:
case $1 in
clone) clone "${@:2}" ;;
commit) commit "${@:2}" ;;
*) echo "Invalid Argument passed" ;;
esac
В функциях "$@"
распространяется на все аргументы функции, безопасно заключенные в кавычки, поэтому они не подлежат разделению или расширению слов.
В операторе case
${@:2}
расширяется до списка аргументов командной строки после первого, благополучно заключенного в кавычки.
Для получения дополнительной информации см. Обработка позиционных параметров [Bash Hackers Wiki] .