12

我一直在查看各种 Linux 发行版附带的一些 .bashrc 和 .profile 脚本,并且看到它们有时会检查$-.

这是Ubuntu中的一个

case $- in
    *i*) ;;
    *) return;;
esac

在这种情况下,它会检查是否存在“i”标志以查看当前 shell 是否是交互式 shell。

我目前的会议给了我这个:

# echo $-
himBH

其他标志/选项是什么意思?某处有完整的清单吗?

4

2 回答 2

20

man bash

-

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

因此,这些是控制 shell 行为的当前选项。尤其:

  • h: 缓存二进制文件的位置$PATH。加快执行速度,但如果您在 shell 会话期间移动二进制文件,则会失败。
  • i:当前shell是交互式的
  • m:启用作业控制
  • B:启用大括号扩展
  • H:历史替代!-1
于 2013-08-09T12:17:33.553 回答
1

它们意味着各种各样的东西。每个字母对应于为 bash 设置的一个选项。例如,“i”表示 shell 是交互式的(因此您提供的代码示例是测试它是否是交互式 shell)。

完整列表可在 bash 手册页中找到。寻找“set”——这是第一行:

set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
于 2013-08-09T12:20:05.833 回答