![](/img/trans.png)
[英]In Bash Script Second Argument to Function is not Processed as Expected
[英]Comparing argument in bash script function
我目前有以下功能:
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);'
有人可以告诉我如何编写此函数吗?
谢谢。
bash中的return
语句不能这样使用。 它仅用于设置函数的退出状态,并且其参数(如果存在)必须为整数文字。 如果要将其他值传递回调用方,则必须使用其他方法。
您还需要使用双括号,以便bash将您的表达式视为算术运算。 否则,它将<0
视为从名为“ 0”的文件重定向stdin的尝试。
尝试以下方法:
function abs() {
echo $(($1<0 ?-$1:$1));
};
abs()
{
echo $(($1<0 ?-$1:$1));
}
echo "abs -321 is $(abs -321)"
在您已经知道的语言基础上猜测语法是在Java,C,C ++,C#和Python等语言中可行的策略,但是不幸的是,它在Bash中不起作用。 尝试使用Bash指南从头开始学习语言。
命令替换是一个选项,但是请使用全局变量,因为它派生成本很高。
function abs {
(( __ = $1 < 0 ? -$1 : $1 ))
}
abs -4
echo "$__"
输出:
4
请参阅算术扩展和Shell算术(上一个算术评估) 。
(( __ = $1 < 0 ? -$1 : $1 ))
等效于__=$(( $1 < 0 ? -$1 : $1 ))
。 function
声明函数时, ()
是不必要的。 abs() { }
也可以是一种形式,并且与原始的基于sh的shell兼容,但是如果您仅使用bash运行代码,那就没关系。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.