redis lua调试器——为什么可以';我不能打印ARGV吗

redis lua调试器——为什么可以';我不能打印ARGV吗,lua,redis,Lua,Redis,我正在调试模式下尝试一个非常简单的lua脚本,并检查ARGV local jobExists = redis.call('exists', ARGV[1]) if jobExists then return false end 然后,我运行调试器,如下所示: redis-cli --ldb --eval ./is_running.lua 0 , user:root 我能够在程序中访问ARGV[1]的值,并且工作正常。但当我尝试打印时,它会说“没有这样的变量” lua debugger&

我正在调试模式下尝试一个非常简单的lua脚本,并检查ARGV

local jobExists = redis.call('exists', ARGV[1])
if jobExists then 
  return false
end
然后,我运行调试器,如下所示:

redis-cli --ldb --eval ./is_running.lua 0 , user:root
我能够在程序中访问ARGV[1]的值,并且工作正常。但当我尝试打印时,它会说“没有这样的变量”

lua debugger> print ARGV[1]
No such variable.
lua debugger> 
因此,它似乎不是lua表或数组。当我打印ARGV而不是ARGV[1]时,我得到以下输出

lua debugger> print ARGV
<value> {"user:root"}
lua调试器>打印ARGV
{“用户:根”}

那么,这是调试器的限制,还是我做错了?

您没有做错任何事情。

使用lua调试程序,您只能打印整个
表的值(
ARGV
实际上是一个lua
),并且您不能只打印
的一项

在调试程序中键入以下命令时:

print varname

Redis搜索lua变量以查找是否有名为
varname
的变量。如果找到一个,Redis将打印变量的值。但是,如果没有名为
varname
的变量,则不会打印此类变量

在您的情况下,
print ARGV[1]
使Redis尝试查找一个变量,其名称正好是ARGV[1],并且没有这样的变量,即
strcmp(“ARGV[1]”,ARGV”)!=0
。所以没有这样的变量

另一方面,通过
print ARGV
,Redis可以找到一个(全局)变量,它的名称正是ARGV。因此它打印变量的值:
表中的所有元素