簡體   English   中英

如何在bash腳本中將函數的返回值作為數組的索引傳遞?

[英]How to pass a return value of a function as an index of an array in bash script?

這是我的程序“ try.sh”:

in=$*
type=(even odd)

echo -e $in " is a " ${type[is_odd $in]} " number."

is_odd()
{
    return `expr $1 % 2`
}

但是,如果我執行“ ./try.sh”,則會出現此錯誤:

./try.sh: line 3: is_odd 2: syntax error in expression (error token is "2")

我想將函數is_odd()的返回值作為索引傳遞給名為“ type”的數組

請告訴我如何使它工作。 謝謝。

與其讓is_odd返回其結果作為狀態碼,不如打印其結果:

is_odd()
{
    expr $1 % 2
}

然后,您可以使用命令替換( `...`$(...) )獲得結果:

echo -e $in " is an " ${type[$(is_odd $in)]} " number."

坦白地說,在這種特定情況下,我可能會放棄該函數並直接使用算術表達式,並且可能會為了提高可讀性而對引號進行一些調整:

echo -e "$in is an ${type[in % 2]} number."

(請注意,雙引號"..."不要阻止參數替換${...}只有單引號'...'和反斜杠\\做到這一點。此外,帽尖jordanm用於指出數組索引被自動處理的算術表達式,即使沒有expr((...))或諸如此類的東西。)

也就是說,如果你真的想返回1為“奇”和0為“偶”,那么首先,你應該重命名功能is_even (因為Bash中, 0表示“成功”或“真”和非零值意味着“錯誤”或“假”),其次,您可以使用后續命令打印其返回值,然后使用命令替換。 這些都應該起作用:

echo -e "$in is an ${type[$(is_even $in ; echo $?)]} number."

echo -e "$in is an ${type[$(is_even $in && echo 0 || echo 1)]} number."

(順便說一句,我也改變了aan在上述所有例子:在英語中是“奇數”,“偶數”。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM