尝试创建一个程序,从命令行获取两个参数并将它们一起添加。但是,如果没有传递两个参数,则需要请求两个参数。
if [$# = 2]; then
ans=$(($1 + $2))
echo "$1 + $2 = $ans"
else
echo "Pass me two Arguments!"
fi
检查参数数量是否等于数字的正确方法是什么?
答案 0 :(得分:2)
你得到了它,但只是忘记了一些逃避的引号和测试之前/之后的空格([$# = 2]
)。修正:
if [ "$#" = 2 ]; then
ans=$(($1 + $2))
echo "$1 + $2 = $ans"
else
echo "Pass me two Arguments!"
fi
看似奇怪,[
实际上是可执行文件的名称,就像echo
,ls
一样,你有什么:
$ which [
/usr/bin/[
这意味着,如果您在[
之后没有空格,则表示您正在尝试启动名为[your_statement
的程序。需要空间来将可执行文件与其参数分开。
大多数* nix系统允许您使用等效的test
可执行文件而不是[
来获得更直观的语法:if test "$#" = 2; then ...
通过省略if
语句中的引号,bash / shell会将#
之后的所有内容解释为注释,因此SO的代码格式设置工具(if [$
之后的所有内容)在你的代码中是灰色的,但在我的代码中却没有,因为我在"$#"
中添加了双引号。
顺便说一下。 ShellCheck非常有用。