POSIX 和 Bash,sh 简写,用于复合 if 语句

POSIX 和 Bash,sh 简写,用于复合 if 语句

我更喜欢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原样运行良好。我不明白删除ifs 并用单行代码替换它们的意义,因为除了偶尔使代码更难以阅读之外,它实际上并没有多大作用。然而,在这种情况下,由于它只是一行,您可以简单地删除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为列表将是更准确的描述。

相关内容