Shell 命令中的双短横线是什么意思


简介

如果您熟悉命令行界面,您可能在使用的一些命令中遇到过双短横线(--)。本文旨在解释双短横线是什么意思以及它如何影响 shell 命令的行为。

Shell 命令中的双短横线是什么?

双短横线是 shell 命令中使用的语法,表示命令选项的结束和位置参数的开始。换句话说,它将命令选项与命令操作的参数分隔开来。

许多 shell 命令允许您指定修改命令行为的选项或标志。例如,ls 命令允许您指定选项,例如 -l 以长格式显示文件或 -a 以显示隐藏文件。当您使用这些选项时,命令将解释它们并相应地修改其行为。

但是,在某些情况下,选项本身可能会与您想要传递给命令的参数冲突。例如,假设您想创建一个名为“-l”的文件。如果您要使用参数“-l”运行 touch 命令,则该命令会将其解释为显示长格式文件详细信息的选项,而不是文件名。

这就是双短横线发挥作用的地方。通过在参数之前添加双短横线,您可以确保它们被解释为位置参数而不是选项。

Shell 命令中双短横线的示例

为了更好地理解双短横线的工作原理,让我们来看一些它在不同命令中的用法示例。

ls 命令

ls 命令用于列出目录的内容。默认情况下,它仅列出文件和目录的名称,但您可以指定选项来修改其行为。

例如,假设您有一个名为“my_folder”的目录,其中包含两个文件,“file1.txt”和“file2.txt”。要以长格式列出文件并显示隐藏文件,您将使用以下命令:

ls -al my_folder

输出如下:

-rw-r--r-- 1 user user 0 Jun 20 10:44 .hidden_file 
-rw-r--r-- 1 user user 0 Jun 20 10:43 file1.txt 
-rw-r--r-- 1 user user 0 Jun 20 10:43 file2.txt

现在假设您想在同一目录中创建一个名为“-l”的文件。如果您使用以下命令:

touch -l my_folder

touch 命令会将“-l”解释为修改其行为的选项,而不是文件名。为避免这种情况,您可以使用双短横线,如下所示:

touch -- -l my_folder

这告诉 touch 命令“-l”是一个位置参数而不是选项。

Git 命令

Git 是一个版本控制系统,通常用于软件开发。它有很多命令和选项,允许您管理代码库。

最常用的 git 命令之一是“git checkout”,它允许您在分支之间切换或将文件恢复到以前的版本。

假设您有一个具有两个分支“main”和“feature”的 git 存储库。要切换到“feature”分支,您将使用以下命令:

git checkout feature

这会将您的工作目录切换到“feature”分支。

现在假设您想创建一个名为“-f”的分支。如果您使用以下命令:

git branch -f

git branch 命令会将“-f”解释为强制创建新分支的选项,而不是分支名称。为避免这种情况,您可以使用双短横线,如下所示:

git branch -- -f

这告诉 git“-f”是一个位置参数而不是选项。

ffmpeg 命令

ffmpeg 是一个功能强大的工具,用于操作和转换音频和视频文件。它有很多选项,允许您修改文件的输出格式和质量。

假设您有一个名为“input.mp4”的视频文件,您想将其转换为 MP3 格式的音频文件。为此,您将使用以下命令:

ffmpeg -i input.mp4 output.mp3

这会将输入视频文件转换为名为“output.mp3”的 MP3 音频文件。

现在假设您想转换一个名为“-i”的视频文件。如果您使用以下命令:

ffmpeg -i -i.mp4 output.mp3

ffmpeg 命令会将“-i”解释为指定输入文件的选项,而不是文件名。为避免这种情况,您可以使用双短横线,如下所示:

ffmpeg -- -i.mp4 output.mp3

这告诉 ffmpeg“-i.mp4”是一个位置参数而不是选项。

为什么要在 Shell 命令中使用双短横线?

正如我们在上面的例子中看到的,在 shell 命令中使用双短横线对于避免命令选项和位置参数之间的冲突非常重要。如果没有它,命令可能会将参数解释为选项并以意外的方式修改其行为。

此外,使用双短横线可以提高命令行代码的可读性和可维护性。通过清晰地将选项与参数分开,它使其他用户更容易理解您的命令正在做什么,并在必要时修改它。

在复杂命令中使用双短横线

在某些情况下,您可能需要在一个命令中使用多个选项和位置参数。在这种情况下,您可以使用多个双短横线来分隔不同的参数组。

例如,假设您有一个脚本,它接受多个选项和参数来执行复杂的操作。您可以使用以下语法来清晰地分隔不同的参数组:

./script --option1 --option2 -- --arg1 arg2 arg3

在这种情况下,选项后的双短横线表示选项组的结束,随后的双短横线将位置参数与选项分隔开。

结论

总而言之,双短横线是 shell 命令中使用的语法,表示命令选项的结束和位置参数的开始。它确保参数被解释为位置参数而不是选项。本文提供的示例显示了如何在不同的命令中使用双短横线来避免选项和参数之间的冲突。了解双短横线的工作原理对于任何使用命令行界面的人来说都很重要。

更新于:2023年3月14日

4K+ 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告