簡體   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