Bash

函式參數

  • September 9, 2015

我在應該是一個簡單的 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,"")

工作腳本和非工作腳本之間的唯一區別是我在第二個腳本中傳遞參數……所以,我嘗試將參數值設置為函式內的常量值(違背了我傳遞參數的目的並製作腳本毫無價值).. 但是,現在函式內的計算可以正常工作。

所以我對自己做錯了什麼感到茫然……我希望能夠將參數傳遞給函式,然後使用傳遞的值進行數學計算。

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

引用自:https://unix.stackexchange.com/questions/228633