Lua的小问题:命令行参数

时间:2021-04-17 14:28:19

近期在Linker推荐下使用markdownLua版),无意中发掘出了一个小问题。

在Windows下,由于我已经将.lua扩展名的文件直接关联到了解释器lua.exe,所以我这样运行markdown:

markdown.lua test.txt

结果程序并没有解析我的源文件,而是不紧不慢地开始读标准输入。我误以为这个程序有个性,忽略参数,直接读标准输入,于是又这样执行:

markdown.lua < test.txt

于是程序直接崩掉。

我很是不解,在寻找各种解决方案(不堪回首)无效后,哭着去找Linker,结果他这样执行:

lua markdown.lua test.txt

成功之后,像看外星人一样看着我,我成功晕菜。

然后这我就纳闷了:lua markdown.lua和直接markdown.lua难道还有区别?于是我写了这样的测试test.lua:

for k, v in pairs(arg) do
    print(k, v)
end

然后在Windows下执行:lua test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 lua
0 test.lua

再执行:test.lua aa bb cc
输出:
-1 D:\lua-5.1.3\src\lua.exe
0 E:\temp\test.lua

晕了,果然邪门,我抑制住情绪,在Linux下做同样的试验,当然在test.lua第一行要加上#!/bin/lua
执行:lua test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 lua
0 test.lua

再执行:./test.lua aa bb cc
输出:
1 aa
2 bb
3 cc
-1 /bin/lua
0 ./test.lua

怀着悲愤的心情,我宣布发现了Windows下Lua的这个不大不小的问题。我不想去研究Windows文件关联的宇宙超级无敌霹雳本质机理学问之类,也不想就Lua的可移植性发表什么言论,只想发自肺腑地呐喊一声:

Windows这个脑残!

回忆起小明的名言:

要是世上没有Windows,还存在什么软件可移植性问题?