我一直在查看一些随各种Linux发行版附带的.bashrc和.profile脚本,并且发现有时它们会检查$-
。
这是Ubuntu中的一个示例:
case $- in
*i*) ;;
*) return;;
esac
在这种情况下,它正在检查是否存在“i”标志,以查看当前 shell 是否为交互式 shell。
我的当前会话显示:
# echo $-
himBH
其他标记/选项的含义是什么? 是否有一个全面的列表?
我一直在查看一些随各种Linux发行版附带的.bashrc和.profile脚本,并且发现有时它们会检查$-
。
这是Ubuntu中的一个示例:
case $- in
*i*) ;;
*) return;;
esac
在这种情况下,它正在检查是否存在“i”标志,以查看当前 shell 是否为交互式 shell。
我的当前会话显示:
# echo $-
himBH
其他标记/选项的含义是什么? 是否有一个全面的列表?
来自bash手册:
-
按照调用时指定的当前选项标志进行扩展,由set内置命令或 shell 本身设置的选项(如 -i 选项)。
因此,这些是控制 shell 行为的当前选项。 特别是:
h
: 将二进制文件在 $PATH
中的缓存位置记录下来。加快执行速度,但如果在 shell 会话期间移动二进制文件,则失败。i
: 当前shell是交互式的m
: 启用作业控制B
: 启用大括号扩展H
: 类似于!-1
的历史替换set builtin
链接非常有帮助。 - peonicles*i*
,因此 himBH
满足 *i*
。 - Andrew Kirna它们表示不同的意思。每个字母都对应一个在bash中设置的选项。例如,“i”表示shell是交互式的(因此,您给出的代码示例是一个测试,以查看它是否为交互式shell)。
完整列表可以在bash man页面中找到。搜索“set” - 这是第一行:
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]