簡體   English   中英

1:找不到命令

[英]1: command not found

我正在Bash中編寫一個divides-by-three函數,它不會讓我將變量設置為數字。

fizzy.sh:

#!/usr/bin/env sh

div3() {
    return `$1 % 3 -eq 0`
}

d=div3 1
echo $d

例:

$ ./fizzy.sh 
./fizzy.sh: line 7: 1: command not found

Bash函數通常通過將值打印到標准輸出來“返回”值,調用者可以使用它來捕獲它們

`func args ...`

要么

$(func args ...)

這使得函數像外部命令一樣工作。

另一方面, return語句設置$?的值$? 通常情況下,將成功設置為0,失敗設置為1,或者指定類型的故障設置為其他值。 將其視為狀態代碼,而不是一般值。 這可能只支持0到255之間的值。

試試這個:

#!/bin/sh

div3() {
    expr $1 % 3 = 0   # prints "0" or "1"
}

d=$(div3 1)
echo $d

請注意,我還將#!/usr/bin/env shshebang行更改為#!/bin/sh #!/usr/bin/env技巧通常在調用您想要通過$PATH定位的解釋器(例如perl )時使用。 但在這種情況下, sh始終位於/bin/sh (如果不是,系統將以各種方式中斷)。 編寫#!/usr/bin/env sh的唯一理由是,如果你想使用在$PATH首先出現的sh命令而不是標准命令。 即使在這種情況下,您可能更好地直接指定sh的路徑。

 d=div3 1

line是罪魁禍首,因為你將字符串div3分配給env變量d並嘗試執行1.為避免這種情況,請使用反引號來分配評估結果:

 d=`div3 1`

然后,評估函數中會出現另一個錯誤。 您需要對參數運行測試,而不是嘗試將它們作為命令進行評估:

return `test $(($1 % 3)) -eq 0`

仍然沒有輸出,但也沒有錯誤。 實際上你的預期產量是多少?

div3() {
    return $(( ( $1 % 3 ) == 0 ))
}

d=$(div3 1)
rc=$?

echo $d
echo $rc


(blank line)
0

注意,return只設置$的值? 要使函數返回值,只需打印即可。

div3() {
    printf $(( ( $1 % 3 ) == 0 )) "\n"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM