我在Bash中寫了一個三分的函數,它不會讓我爲一個數字設置一個變量。1:找不到命令
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中寫了一個三分的函數,它不會讓我爲一個數字設置一個變量。1:找不到命令
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
擊功能正常「返回」的值。
另一方面,return
聲明設置的值爲$?
。通常情況下,成功設置爲0,失敗1或者指定類型故障的其他值。把它看作是一個狀態碼,而不是一個普通的值。這可能是因爲這隻會從0支持值255
試試這個:
#!/bin/sh
div3() {
expr $1 % 3 = 0 # prints "0" or "1"
}
d=$(div3 1)
echo $d
請注意,我也改變了shebang line從#!/usr/bin/env sh
到#!/bin/sh
。在調用您想要通過$PATH
定位的解釋器(例如perl
)時,經常使用#!/usr/bin/env
技巧。但在這種情況下,sh
將總是在/bin/sh
(如果不是,系統將以各種方式中斷)。編寫#!/usr/bin/env sh
的唯一原因是,如果您想使用任何sh
命令碰巧首先出現在您的$PATH
中,而不是標準的。即使在這種情況下,您可能更願意直接指定到sh
的路徑。
的
d=div3 1
行是罪魁禍首,因爲您指定的字符串DIV3到環境變量d,並嘗試執行1.爲了避免這種情況,請使用反引號來指定評估結果:
d=`div3 1`
然後,您的評估函數發生另一個錯誤。您需要在您的參數運行,而不是試圖評價其命令測試:
return `test $(($1 % 3)) -eq 0`
仍然沒有輸出,但沒有任何錯誤。實際上你預期的產出會是多少?
@MattBall:我也是這麼做的,那裏有一個蒙面的錯誤。編輯,謝謝。 – thiton
div3() {
return $((($1 % 3) == 0))
}
d=$(div3 1)
rc=$?
echo $d
echo $rc
(blank line)
0
注意,return只是設置$的值?功能 返回值,只需打印它。通過將它們印刷到標準輸出,其中,所述主叫方可以使用
`func args ...`
或
$(func args ...)
這使得功能工作狀的外部命令捕捉它們
div3() {
printf $((($1 % 3) == 0)) "\n"
}
你的'div3'函數並沒有做你認爲它的功能。 –
僅用於記錄/ google搜索者==>這裏不是這種情況,但是如果不小心在等號周圍添加了空格'd = div3 1'與正確的'd = div3',則會得到完全相同的錯誤1'。 –