Shell命令中的双破折号是什么意思?

您所在的位置:网站首页 破折号表示什么意思该怎么读才正确 Shell命令中的双破折号是什么意思?

Shell命令中的双破折号是什么意思?

2024-04-06 00:06| 来源: 网络整理| 查看: 265

1. 概述

在本教程中,我们将研究双破折号在 shell 命令中的使用。我们将看看它的作用以及何时需要它。

2. 它有什么作用?

**shell 命令中的双破折号表示选项结束并禁用进一步的选项处理。**让我们使用grep 命令来看看这一点 。

想象一个场景,我们想 在文件data.txt中搜索hello的出现:

$ grep hello data.txt

此命令输出指定文件中所有出现的字符串hello。但是,如果我们想要查找所有出现的“–hello”而不是hello怎么办?

如果我们使用相同的方法,我们会收到一个错误:

$ grep "--hello" data.txt grep: unrecognized option '--hello'

这是因为grep将“–hello”视为多字符命令选项。为了克服这个问题,我们需要使用双破折号 (–)。后面的任何内容都将被视为位置参数:

$ grep -- --hello data.txt 3. 什么时候需要?

**每当我们的非选项参数以连字符开头时,我们都需要使用双破折号。**如果我们不终止选项处理,命令将尝试将非选项参数解释为选项,并且很可能会失败。

我们已经看到当我们为 grep提供以连字符开头的模式时会发生什么。不过,这并不总是那么明显。

有时,我们无法完全控制参数。例如,可以使用环境变量将参数提供给命令:

$ grep $PATTERN data.txt

如果环境变量PATTERN内容为“–hello”,则grep命令会将模式视为命令选项,并失败。相反,我们应该使用双破折号:

$ grep -- $PATTERN data.txt

我们在删除文件时 也会遇到类似的情况。例如,假设我们有一个充满文本文件的文件夹。我们可以使用带有通配符的rm删除它们 :

$ rm *.txt

但是,如果任何文件名以连字符开头,则该命令将失败,因为该文件名将被视为命令选项。为了解决这个问题,我们必须使用双破折号:

$ rm -- *.txt 4. 并非所有命令都支持

不幸的是,并非所有命令都支持双破折号功能。

例如,让我们看一下 Bash 中的echo 命令。如果我们想 使用 echo输出字符串“-n”,我们可以尝试使用双破折号来终止选项处理:

$ echo -- "-n" -- -n

与 Bash 捆绑的echo版本也将输出双破折号。但是,如果我们尝试在没有双破折号的情况下运行该命令,我们将不会收到可见的输出。这是因为“-n”被视为一个选项,指示echo 不要打印尾随的换行符。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3