我在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'。 –