Shell

為什麼許多命令提供“安靜”選項?

  • April 1, 2022

當您可以通過將標準輸出重定向到空文件來輕鬆實現相同的事情時,為什麼許多命令提供選項-q或抑制輸出?--quiet

  • 雖然您可以在 shell 中輕鬆重定向,但在其他情況下它並不那麼容易,例如在不使用 shell 命令行的情況下以另一種語言執行命令時。即使在外殼中:
find . -type f -exec grep -q foo {} \; -printf '%s\n'

列印所有包含foo. 如果您重定向到/dev/null,您將失去findgrep輸出。您需要求助於-exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;(即產生一個額外的外殼)。

  • grep -q foo比打字短grep foo > /dev/null
  • 重定向到/dev/null意味著輸出仍然被寫入然後被丟棄,這比不寫入效率低(並且不分配,準備要寫入的輸出)
  • 這允許進一步優化。例如,grep由於 with知道輸出不是必需的,所以一旦找到第一個匹配項,它就會退出。使用時,它仍會嘗試查找所有匹配項。-q``grep``grep > /dev/null
  • 安靜並不一定意味著沉默。對於某些命令,這意味著減少冗長(與 相反-v|--verbose)。例如,mplayer有一個--quiet和一個--really-quiet。使用某些命令,您可以-qqq將詳細程度降低 3 倍。

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