аргументы функций

У меня возникают проблемы с тем, что должно быть простым сценарием bash.

У меня есть сценарий bash, который отлично работает:

function convert_to () x_max=2038 y_max=1146 x_marg=100 y_marg=30 x_grid=150 y_grid=150 if (("$x_pos" > "($x_marg+($x_grid/2))")); then x_pos=$((x_pos-x_marg)) x_mod=$((x_pos%x_grid)) x_pos=$((x_pos/x_grid)) x_pos=$((x_pos*x_grid)) fi 

Тем не менее, я хочу изменить сценарий, где я передаю 4 значения функции в качестве аргументов:

 function convert_to () pos="$1" marg="$2" grid="$3" max="$4" # I verify that the inputs have arrived with this display zenity --info --title "Info" --text "inputs: pos: $pos marg: $marg grid: $grid max: $max" if (("$pos" > "($marg+($grid/2))")); then pos=$((pos-marg)) mod=$((pos%grid)) pos=$((pos/grid)) pos=$((pos*grid)) fi } 

Затем я бы назвал функцию следующим образом:

 x_pos="$(convert_coordinates $x_pos, $x_marg, $x_grid, $x_max)" Y_pos="$(convert_coordinates $y_pos, $y_marg, $y_grid, $y_max)" 

Однако новый скрипт всегда терпит неудачу с синтаксическими ошибками: ожидаемый операнд (маркер ошибки – «,»).

Я также пробовал много вариантов:

 pos=$[[ $pos - $marg ]] ...... which results in syntax error: operand expected (error token is "[ 142, - 100, ]") pos=[[ $pos - $marg ]] .......... fails with command not found pos=$[[ "$pos" - "$marg" ]] ..... fails with command not found pos=$(("$pos"-"$marg")) ......... syntax error: operand expected (error token is ""142,"-"100,"") 

Единственное различие между рабочим скриптом и нерабочим заключается в том, что я передаю аргументы во втором скрипте … Итак, я попытался установить значения аргументов в постоянные значения внутри функции (побеждая мою цель передавать аргументы и делать сценарий никчемный). Но теперь вычисления внутри функции работают без ошибок.

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

One Solution collect form web for “аргументы функций”

В bash разделителями аргументов являются пробелы, поэтому:

вместо :

 x_pos="$(convert_coordinates $x_pos, $x_marg, $x_grid, $x_max)" 

делать

 x_pos="$(convert_coordinates $x_pos $x_marg $x_grid $x_max)" 
  • Сценарий для отправки почты с использованием функции
  • Можете ли вы выполнить функцию Bash с помощью команды `at`?
  • Функция, вызывающая другую функцию со списком аргументов, не работает
  • Как передать строковый параметр в функции bash?
  • Ubuntu 16.04 Скрипты в файле /etc/profile.d
  • strace не находит функцию оболочки с ошибкой «Can not stat»
  • Необязательные параметры в функции bash
  • bash для выполнения команды в качестве аргумента
  • Значение, назначенное внутри функциональной переменной, всегда пусто
  • Параллельный запуск функций
  • Позиционные параметры вызывающего абонента функции
  • Linux и Unix - лучшая ОС в мире.