fonctions arguments

J'ai des problèmes avec ce qui devrait être un simple script bash.

J'ai un script bash qui fonctionne parfaitement:

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 

Cependant, je veux changer le script où je passe 4 valeurs à la fonction en tant qu'arguments:

 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 } 

Où j'appellerais alors la fonction comme suit:

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

Cependant, le nouveau script échoue toujours avec des erreurs de syntaxe: opérande attendue (le jeton d'erreur est ",").

J'ai aussi essayé beaucoup de variations:

 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,"") 

La seule différence entre le script de travail et le non-travail est le fait que je passe les arguments dans le second script … Donc, j'ai essayé de mettre les valeurs d'arguments à des valeurs constantes dans la fonction (vaincre mon but de passer des arguments et de faire le script sans valeur) .. Mais, maintenant les calculs au sein de la fonction fonctionnent sans erreur.

Je suis donc à court de ce que je fais mal … Je veux être en mesure de passer des arguments à la fonction et ensuite faire des calculs mathématiques en utilisant les valeurs transmises.

En bash , les séparateurs d'argument sont des espaces, donc:

au lieu de :

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

faire

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