我更喜欢sh
用速记方式执行命令,而且我更喜欢使用 POSIX。说实话,如果脚本可以在 Dash 上运行,那就足够了。这意味着使用测试命令[
,而不是扩展命令[[
。
我有一个来自自动启动脚本的示例,我不确定。
if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi
所以我的猜测是,如果dbus-launch
和$DBUS_SESSION_BUS_ADDRESS
为空,则执行eval
.我该如何用简写来写这个?我很感谢有关此主题的任何帮助。
答案1
您发布的代码片段是 POSIX 合法的,并且应该按dash
原样运行良好。我不明白删除if
s 并用单行代码替换它们的意义,因为除了偶尔使代码更难以阅读之外,它实际上并没有多大作用。然而,在这种情况下,由于它只是一行,您可以简单地删除if
, ; then
, 和fi
并将其替换; then
为&&
, ie
which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS" &&
eval `dbus-launch --sh-syntax --exit-with-session`
在功能上应该与问题中的片段等效。另外,如果这就是您所说的“速记”的意思,我不认为它是一个通用或标准术语,并且它不会节省太多的打字字符。 将复合命令转换if
为列表将是更准确的描述。