连字符作为特殊参数的含义?

连字符作为特殊参数的含义?

https://www.gnu.org/software/bash/manual/html_node/Special-Parameters.html,

-(连字符。)扩展为调用时指定的当前选项标志、set 内置命令或 shell 本身设置的选项标志(例如 -i 选项)。

我不确定它说什么。您能举例说明连字符参数的含义吗?

答案1

您可以echo $-查看当前启用的 shell 选项:

$ echo $-
himBH

这些是您可以通过-shell 调用提供的选项 — bash -h -B— 或稍后使用set

标志定义在的文档set。我上面的选择是:

  • -h 在查找执行命令时找到并记住(散列)命令。默认情况下启用此选项。
  • -m 作业控制已启用(请参阅作业控制)。所有进程都在单独的进程组中运行。当后台作业完成时,shell 会打印一行包含其退出状态的行。
  • -B shell 将执行大括号扩展(参见支撑扩张)。该选项默认处于启用状态。
  • -H 使能够 '!'样式历史替换(参见历史互动)。对于交互式 shell,此选项默认处于启用状态。

i对于交互式 shell

如果我更改活动选项,例如使用set -x,我将获得新值$-

$ set -x +h
$ echo $-
imxBH

答案2

它取决于 - 作为美元符号扩展,扩展为当前 shell 的表单字母选项$-列表- 例如and和。例如,交互式 shell 将扩展它set-x-f-C至少喜欢:

echo "$-"

i

更长的set -o option版本可以用set +o.

但还有另一种连字符特殊参数这与此类似。您可以使用连续的连字符表示典型命令参数列表中选项的结束,但您也可以使用单个连字符对 POSIX-shell 执行相同的操作。从历史上看,贝壳接受单身的连字符的意思大致相同。

shellbash专门解释参数列表上下文中的单连字符。例如set,它标志着选项的结束禁用-verbose 和-x跟踪。另外,set -确实不是如果参数列表是第一个也是唯一一个参数,则清除参数set列表set --

登录 shell 通常会在-argv[0].

相关内容