[英]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.