Bash

在組合命令的不同選項時正確的順序

  • July 30, 2019

每當針對某個命令使用多個選項時,我通常會將選項組合在一起。例如,如果我想創建一個存檔使用tar我會寫tar -cvf archive.tar file1 file2但我的疑問是如何知道我必須將選項組合在一起的正確順序。如果我使用tar -cfv archive.tar file1 file2它會顯示錯誤。我也遇到過許多其他命令的這個問題。我知道這是一個非常愚蠢的懷疑,但我很難通過它。我也檢查了man命令的描述,但他們在概要部分指定了一個特定的序列。我找不到與按特定順序組合選項相關的內容。

任何給定命令的手冊將準確描述如何使用其選項。

在這種情況下,該-f選項採用文件名參數。一個選項的參數(如果它需要一個)必須放在它之後。在您的第一個tar命令中,此文件名參數是archive.tar,但在您的第二個命令中是v.

第二個命令嘗試v從三個文件archive.tar file1. 和file2. 由於archive.tar可能不存在,因此您會收到有關此的錯誤消息。

同樣,tar手冊將對此進行描述。GNUtar手冊說

tar -c [-f ARCHIVE] [OPTIONS] [FILE...]

所以很明顯,它-f採用了檔案的名稱。再往下一點,上面寫著

-f,--file=ARCHIVE

使用存檔文件或設備ARCHIVE

$$ … $$

您使用的其他選項-c-v不帶參數。

此外,通常,選項位於文件操作數之前。一些 GNU 工具允許您在命令行的最後添加選項,如

tar -c -f archive.tar file1 file2 -v

但這是(恕我直言)不好的風格,它會在許多其他 Unices 上中斷(-v將被解釋為文件名)。

tar按照大綱中的形式編寫命令的 100% 正確方法是

tar -c -f archive.tar -v file1 file2

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