[英]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 sh
的shebang行更改為#!/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.