我遇到了一個bash腳本,該腳本在一個函數中運行以下命令set -erm -rf some_dir/* && :;&& :;在這方面的目的是什么?編輯:我知道這是的同義詞&& true,但現在我不了解它為何繞過set -e嘗試一下,我看到運行以下命令#!/bin/bash -e# falseecho false alone return 1 and fail with -efalse || trueecho "false || true return $?"false || :;echo "false || :; return $?"false && trueecho "false && true return $?"false && :;echo "false && :; return $?"false && :echo "false && : return $?"產出false alone return 1 and fail with -efalse || true return 0false || :; return 0false && true return 1false && :; return 1false && : return 1
2 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
這&&
很容易解釋。在bashman
頁面中:
command1 && command2
僅當command1返回退出狀態為零時,才能執行command2。
:
在文檔中很難找到。:
是一個等效于的內置函數true
:
:; echo $? 0
因此,總的來說,此命令等于:
遞歸刪除目錄,如果rm成功,則運行'true'。
不過,這似乎沒有必要,因為&&
已經“測試”了rm返回的真,所以有點像在做true && true
。
更常見的是,當您想要if/else
僅else
做某事的地方時使用,例如
if command1; then :; else command2; fi
盡管這僅在您的系統沒有true
命令時才有用,但是對于以后的代碼閱讀者來說,可以說更容易理解。(或者,您可以使用否定測試,而不用完全不操心)。
- 2 回答
- 0 關注
- 307 瀏覽
添加回答
舉報
0/150
提交
取消