Linux Erlang escript中的Case表达式

Linux Erlang escript中的Case表达式,linux,erlang,Linux,Erlang,我正在测试我的erlang escript,escriptis的内容如下: #!/usr/bin/env escript main([Action]) -> case Action of start -> start(); stop -> stop() end; main(_) -> usage(). usage() -> io:format("usage: factorial integer\n")

我正在测试我的erlang escript,escriptis的内容如下:

#!/usr/bin/env escript
main([Action]) ->
    case Action of
        start -> start();
        stop -> stop()
    end;
main(_) ->
    usage().

usage() ->
    io:format("usage: factorial integer\n"),
    halt(1).

start() -> io:format("Start.~n").
stop() -> io:format("Stop.~n").
但当我尝试运行escript时,我遇到了以下问题:

./escript start
escript: exception error: no case clause matching "start"

是什么导致了这个问题?参数格式是否错误?

命令行参数作为字符串传递给
main/1
,而不是原子,因此您需要匹配
“start”
“stop”
,而不是
start
stop

...
main([Action]) ->
    case Action of
        "start" -> start();
        "stop" -> stop()
    end;
...

除非您的实际代码更复杂/不同,否则您也可以直接在函数子句中匹配
[“start”]
[“stop”]

main(["start"]) -> start();
main(["stop"]) -> stop();
main(_) ->
    usage().
这将调用
/escript foo
usage()
,而原始脚本可能会崩溃,这可能不是您想要的