比较bash脚本函数中的参数

时间:2014-08-03 06:04:33

标签: bash unix

我目前有以下功能:

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);'

有人能告诉我应该怎么写这个函数吗?

谢谢。

3 个答案:

答案 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 ExpansionShell Arithmetic (prev. Arithmetic Evaluation)

  • (( __ = $1 < 0 ? -$1 : $1 ))相当于__=$(( $1 < 0 ? -$1 : $1 ))
  • 使用()声明函数时,
  • function是不必要的。 abs() { }也可以是一个表单,并且与原始的基于sh的shell兼容,但如果你只是用bash运行你的代码就无所谓了。