繁体   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