我一直在查看一些随各种Linux发行版一起提供的.bashrc和.profile脚本,并且看到有时他们会检查$-
。
这是Ubuntu中的一个
case $- in
*i*) ;;
*) return;;
esac
在这种情况下,它会检查“i”标志是否存在以查看当前shell是否是交互式shell。
我当前的会议给了我这个:
# echo $-
himBH
其他标志/选项是什么意思?某处有完整的清单吗?
答案 0 :(得分:14)
来自man bash:
-
扩展为调用时指定的当前选项标志,set builtin命令或shell本身设置的那些(例如-i选项)。
因此,这些是控制shell行为的当前选项。特别是:
h
:在$PATH
中缓存二进制文件的位置。加快执行速度,但如果在shell会话期间移动二进制文件,则会失败。i
:当前的shell是交互式的m
:Job control已启用B
:Brace expansion已启用H
:History substitution,如!-1
答案 1 :(得分:1)
他们意味着各种各样的事情。每个字母对应一个为bash设置的选项。例如,“i”表示shell是交互式的(因此您提供的代码示例是测试它是否是交互式shell)。
bash手册页中提供了完整列表。寻找“集合” - 这是第一行:
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]