在shell脚本中使用$-的用法

7
在Unix中,$-有什么用途?在我的系统中,输出结果为:
$ echo $-
himBH
$

什么是himBH?它代表什么?

提前感谢...

1个回答

11

它返回当前 shell 的标志。变量$-包含当前在您的终端中活动的 shell 标志,这些标志确定 shell 如何为您运行。在您的情况下,这些标志具有以下含义(请注意所有这些都是默认值):

  • h:代表“hashall”(读作“hash all”),这告诉 bash 记住通过查询您的 PATH 找到的命令的位置。

  • i:代表“交互式”,这很好,因为这是我正在与之交互的 shell(输入和获得输出)!

  • m:代表“监控”,这使得 bash 支持作业控制(例如,您可以通过 bg 将作业发送到后台)。

  • B:代表“braceexpand”(读作“brace expand”),这允许您在 bash 中使用非常有效的花括号扩展2。

  • H:代表“histexpand”(读作“hist [history] expand”),这使您能够通过在其编号前加上感叹号3来重新运行来自历史记录的命令。

可以使用set命令更改这些标志。例如:

set +H 
echo $- 
himB

去掉H标志,而保留-

set -H
echo $- 
himBH

恢复它。就是这样,有点混乱,但是+会删除一个标记,而-会添加一个标记。


更多信息:


所以,这里的'h'代表hashall。它告诉bash通过查询您的PATH来记住它找到的命令的位置。那么,如果我禁用'h',会发生什么呢?bash找不到路径并无法执行命令。这是正确的吗? - mohangraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接