我的if-then-else结束语句在Lua中失败;我怎样才能修好它?

我的if-then-else结束语句在Lua中失败;我怎样才能修好它?,lua,syntax-error,awesome-wm,Lua,Syntax Error,Awesome Wm,我正在努力改进我的rc.lua,以满足未来的需求。默认的rc.lua设置一个包含以下代码的菜单: myawesomemenu = { { "manual", terminal .. " -e man awesome" }, { "edit config", editor_cmd .. " " .. awesome.conffile }, { "restart", awesome.restart }, { "quit", awesome.quit } } 我使用Aweso

我正在努力改进我的
rc.lua
,以满足未来的需求。默认的
rc.lua
设置一个包含以下代码的菜单:

myawesomemenu = {
   { "manual", terminal .. " -e man awesome" },
   { "edit config", editor_cmd .. " " .. awesome.conffile },
   { "restart", awesome.restart },
   { "quit", awesome.quit }
}
我使用Awesome作为GNOME桌面环境的窗口管理器,因此我想让Awesome使用
GNOME会话退出
程序,而不是
Awesome.quit
,但前提是环境变量“DE”设置为“GNOME”。因此,我将第五行替换为

{ "quit", if os.getenv("DE") == "gnome" then os.execute("/usr/bin/gnome-session-quit") else awesome.quit end }

但当我重新加载文件时,我会得到“if附近的意外符号”。我如何解决这个问题,以及是什么原因造成的?

我很确定Lua不会那样工作:p

您是否尝试过将其包装到函数中

{
    "quit", 
    function()
        if os.getenv("DE") == "gnome" then
            os.execute("/usr/bin/gnome-session-quit")
        else
            awesome.quit
        end
    end
}
你也可以尝试重写
awesome。改用退出

_awesome_quit = awesome.quit
awesome.quit = function()
    if os.getenv("DE") == "gnome" then
        os.execute("/usr/bin/gnome-session-quit")
    else
        _awesome_quit()
    end
end
试试这个:

{ "quit", (os.getenv("DE") == "gnome") and function() os.execute("/usr/bin/gnome-session-quit") end or awesome.quit}

a和b或c
类似于c表达式
a?b:c
,前提是
b
不是
false

os.execute(“/usr/bin/gnome session quit”)
部分可能需要包装到函数中。否则,它将在正确的位置执行,而不是稍后执行。原因:在Lua中,
if
语句不是表达式。