命令行参数

这是一个给初次编写OCaml程序且想知道命令行意义的人看的简略指南。

argv

与C语言一样, 传给程序的参数存在一个数组里面。按照惯例, 数组名为argv.它可以在标准库的Sys模块中找到, 因此它的全称是Sys.argv.包括程序名的参数,它们的个数就是此数组的长度. 它可以通过Array.length函数取得。

简单示例

下面的程序显示Sys.argv里的参数以及它们各自在数组中的位置:

# open Printf
    
  let () =
    for i = 0 to Array.length Sys.argv - 1 do
      printf "[%i] %s\n" i Sys.argv.(i)
    done;;
[0] ./script/code_top

如果你把上面程序存为args.ml, 并且运行ocaml args.ml arg1 arg2 arg3,你将得到:

[0] args.ml
[1] arg1
[2] arg2
[3] arg3

ocaml 其实是开启了一个子进程来运行这个argv是 args.ml arg1 arg2 arg3的程序. 你也可以用 ocamlopt -o args args.ml来编译你的程序,之后运行./args arg1 arg2 arg3,你将得到:

[0] ./args
[1] arg1
[2] arg2
[3] arg3

解析命令行选项的工具

有一些库可以用来帮你处理命令行参数, 而不必你自己来扫描Sys.argv 数组:

  • Arg 是标准库的一个模块。
  • OCaml版的Getopt ,与GNU getopt类似。
  • Pa_arg库提供了一个方便的语法来定义和识别选项。