这是我的程序“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”的数组
请告诉我如何才能让它发挥作用。感谢。
答案 0 :(得分:3)
我认为最好打印其结果,而不是让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."
(请注意,双引号"..."
不会阻止参数替换${...}
。只有单引号'...'
和反斜杠\
才能执行此操作。另外,引号为{ {3}}指出数组索引自动被视为算术表达式,即使没有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
:在英语中,它是“奇数”,“偶数”。)