![](/img/trans.png)
[英]Bash - How to pass array to function, with index defined in new function
[英]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."
(順便說一句,我也改變了a
到an
在上述所有例子:在英語中是“奇數”,“偶數”。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.