この初版は、Lua 5.0 向けに執筆されました。後のバージョンにも広く関連していますが、いくつかの違いがあります。
第 4 版は、Lua 5.3 を対象としており、Amazon やその他の本屋で購入できます。
本を購入することで、Lua プロジェクトのサポートにも貢献できます。


1.4 – スタンドアロンインタプリタ

スタンドアロンインタプリタ(ソースファイルが lua.c であるため、lua.c とも呼ばれ、単に lua とも呼ばれる実行ファイル)は、Lua を直接に使用できるようにする小さなプログラムです。このセクションでは、主なオプションについて説明します。

インタプリタがファイルを読み込むとき、その最初の行が数字の記号(`#´)で始まっている場合は、その行は無視されます。この機能により、Unix システムで Lua をスクリプトインタプリタとして使用できます。次のようにプログラムを開始する場合

    #!/usr/local/bin/lua
(スタンドアロンインタプリタが /usr/local/bin にあることを前提として)、または
    #!/usr/bin/env lua
Lua インタプリタを明示的に呼び出さずに、直接プログラムを呼び出すことができます。

lua の使用法は次のとおりです。

    lua [options] [script [args]]
すべてオプションです。すでに説明したように、lua を引数なしで呼び出すと、インタプリタは対話モードになります。

-e オプションを使用すると、コマンドラインにコードを直接入力できます。たとえば、

    prompt> lua -e "print(math.sin(12))"   --> -0.53657291800043
(Unix では、シェルが括弧を解釈しないようにするために二重引用符が必要です。)前に説明したように、-l はファイルをロードし、-i は他の引数をすべて実行した後に対話モードになります。そのため、たとえば、次の呼び出しは
    prompt> lua -i -l a.lua -e "x = 10"
a.lua ファイルをロードし、x = 10 という代入を実行し、最後に対話用のプロンプトを表示します。

グローバル変数 _PROMPT が定義されている場合、lua は対話時にプロンプトとしてその値を使用します。そのため、次のような呼び出しでプロンプトを変更できます。

    prompt> lua -i -e "_PROMPT=' lua> '"
     lua>
"prompt" はシステムのプロンプトであると仮定します。この例では、外側の引用符がシェルによる内側の引用符の解釈を停止し、Lua によって解釈されます。より正確には、Lua は次のコマンドを実行するように受け取ります。
    _PROMPT=' lua> '
これにより、文字列 " lua> " がグローバル変数 _PROMPT に代入されます。

引数の実行を開始する前に、luaLUA_INIT という環境変数を検索します。このような変数があり、その内容が @ファイル名 の場合、lua は指定したファイルをロードします。LUA_INIT が定義されているが、@ から始まっていない場合、lua はそれが Lua コードを含むものとみなし、実行します。この変数により、スタンドアロンインタプリタを構成するときに大きな力を発揮できます。これは、構成に Lua のすべての機能を使用できるためです。パッケージをプリロードしたり、プロンプトやパスを変更したり、独自の関数を作成したり、関数を名前変更したり削除したりできます。

メインスクリプトは、グローバル変数 arg で引数を受け取ることができます。次のような呼び出しでは

    prompt> lua script a b c
スクリプトを実行する前に、lua はすべてのコマンドライン引数を使用してテーブル arg を作成します。スクリプトの名前はインデックス 0 に、最初の引数(この例では a)はインデックス 1 に、というように、順番に入れていきます。オプションはスクリプトの前に表示されるため、負のインデックスに移動します。たとえば、次の呼び出しでは
    prompt> lua -e "sin=math.sin" script a b
lua は次のように引数を収集します
    arg[-3] = "lua"
    arg[-2] = "-e"
    arg[-1] = "sin=math.sin"
    arg[0] = "script"
    arg[1] = "a"
    arg[2] = "b"
スクリプトは多くの場合、正のインデックス(たとえば、arg[1]arg[2])のみを使用します。