![](/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.