bash环境变量$中的字符是什么意思?

peo*_*les 9 linux bash

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

这是Ubuntu中的一个

case $- in
    *i*) ;;
    *) return;;
esac
Run Code Online (Sandbox Code Playgroud)

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

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

# echo $-
himBH
Run Code Online (Sandbox Code Playgroud)

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

phi*_*hag 16

来自man bash:

-

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

所以这些是控制shell行为的当前选项.特别是:

  • h:缓存中的二进制文件的位置$PATH.加快执行速度,但如果在shell会话期间移动二进制文件,则会失败.
  • i:当前的shell是交互式的
  • m:已启用作业控制
  • B:启用支撑扩展
  • H:历史替代就像!-1