У меня тут несколько вопросов назрело. Аргументы в функцию передаются по тем же правилам, что и в скрипт? Что, если я передам пару аргументов в скрипт, а потом еще пару в функцию, и попытаюсь их обработать внутри функции как $1 и $2 - она проигнорирует 1й и 2й аргумент, переданный скрипту, и будет использовать только то, что передали конкретно функции?
Могу я использовать арифметические операции при обработке аргументов? Допустим я ввел 2 переменные с клавиатуры- a и b. Я использую их как аргументы при вызове функции.
myfunc $a $b
В самой функции я сравниваю $1 и $2 аргумент, и если они не равны, снова вызываю эту же функцию (т.е. саму себя, так вообще можно?), но уже с другими аргументами, нужно вычитание. Пример:
myfunc ${a-b} $b
Такая запись работает? Она вычитает b из a? Интерпретатор не жалуется, но программа ничего не вычисляет, более того, через несколько секунд вылетает ошибка.
Ошибка сегментирования (стек памяти сброшен на диск)
И вроде в самой функции я прописал условие, когда надо остановиться, но такое ощущение что рекурсивный вызов функции в баше не работает. Или все норм?
И вот еще что. После этой конструкции:
myfunc ${a-b} $b
Возможно, еще надо как-то сделать, чтобы измененный (после вычитания) 1й аргумент еще где-то/как-то сохранился, но я не пойму как. Я просто запускаю функцию в этом виде и жду результата, но такое ощущение что я должен написать что-то еще, т.е. грубо говоря пересохранить новое «a». Но т.к. это уже не просто переменная, а аргумент, че-то не пойму как это сделать. Т.е. походу сам рекурсивный вызов функции с измененными аргументами (вычитание) не сохраняет состояние измененных аргументов, и поэтому она крутится бесконечно...