我目前有以下功能:
function abs()
{
return ($1<0 ?-$1:$1);
}
当我尝试运行我的脚本时,我收到语法错误:
bin/bash1.sh: line 5: syntax error near unexpected token `$1'
bin/bash1.sh: line 5: ` return ($1<0 ?-value:value);'
有人能告诉我应该怎么写这个函数吗?
谢谢。
答案 0 :(得分:2)
bash中的return
语句无法像这样使用。它仅用于设置函数的退出状态,其参数(如果存在)必须是整数文字。如果要将其他一些值传递给调用者,则必须使用其他方法。
你还需要使用双括号,以便bash将你的表达式视为算术;否则,它会将<0
视为尝试从名为&#34; 0&#34;的文件重定向stdin。
请改为尝试:
function abs() {
echo $(($1<0 ?-$1:$1));
};
答案 1 :(得分:1)
abs()
{
echo $(($1<0 ?-$1:$1));
}
echo "abs -321 is $(abs -321)"
基于您已经知道的语言猜测语法是Java,C,C ++,C#和Python等语言的可行策略,但不幸的是,它在Bash中不起作用。尝试Bash Guide从头开始学习语言。
答案 2 :(得分:0)
命令替换是一种选择,但使用全局变量,因为分叉是昂贵的。
function abs {
(( __ = $1 < 0 ? -$1 : $1 ))
}
abs -4
echo "$__"
输出:
4
请参阅Arithmetic Expansion和Shell Arithmetic (prev. Arithmetic Evaluation)。
(( __ = $1 < 0 ? -$1 : $1 ))
相当于__=$(( $1 < 0 ? -$1 : $1 ))
。()
声明函数时,function
是不必要的。 abs() { }
也可以是一个表单,并且与原始的基于sh的shell兼容,但如果你只是用bash运行你的代码就无所谓了。