繁体   English   中英

在bash脚本函数中比较参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM