Bash

POSIX 和 Bash,sh 簡寫,用於復合 if 語句

  • February 19, 2013

我更喜歡sh用速記方式執行命令,而且我更喜歡使用 POSIX。說實話,如果腳本可以在 Dash 上執行,那就足夠了。這意味著使用 test 命令[,而不是擴展的[[.

我有一個來自自動啟動腳本的範例,我不確定。

if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
  eval `dbus-launch --sh-syntax --exit-with-session`
fi

所以我的猜測是如果dbus-launchand$DBUS_SESSION_BUS_ADDRESS是空的,那麼做eval. 我如何用速記寫這個?我感謝任何關於這個主題的幫助。

您發布的程式碼段是 POSIX 合法的,應該可以正常執行dash。我不明白刪除ifs 並用單行替換它們的意義,因為除了偶爾使程式碼更難閱讀之外,它實際上並沒有太大的作用。然而,在這種情況下,由於它只是一行,您可以簡單地刪除if,; then和並用 afi替換 the ,即; then``&&

which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS" && 
eval `dbus-launch --sh-syntax --exit-with-session`

應該在功能上等同於問題中的程式碼段。另外,如果這就是您所說的“速記”,我認為這不是通用或標準術語,並且不會節省太多打字字元。 if復合命令轉換為列表將是更準確的描述。

引用自:https://unix.stackexchange.com/questions/26862