functions arguments

3

Estou com problemas com o que deveria ser um script simples.

Eu tenho um script bash que funciona perfeitamente:

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

No entanto, eu quero mudar o script onde eu passo 4 valores para a função como argumentos:

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
}

Em que eu chamaria a função da seguinte maneira:

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

No entanto, o novo script sempre falha com erros de sintaxe: operandos esperados (token de erro é ",").

Eu também tentei muitas variações:

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

A única diferença entre o script de trabalho e o não trabalho é o fato de eu estar passando os argumentos no segundo script ... Então, eu tentei definir os valores de argumento como valores constantes dentro da função (derrotar meu propósito de passar argumentos e tornando o script inútil) .. Mas, agora os cálculos dentro da função estão trabalhando sem erro.

Então, estou perdendo o que estou fazendo incorretamente ... Eu quero ser capaz de passar argumentos para a função e fazer cálculos matemáticos usando os valores passados.

    
por daniel 09.09.2015 / 21:11

1 resposta

5

Em , os separadores de argumentos são espaços, então:

em vez de:

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

faça

x_pos="$(convert_coordinates $x_pos $x_marg $x_grid $x_max)"
    
por 09.09.2015 / 21:19