Answers:
$-
表示“当前标志”。echo $-
返回“ himBH”。这些都是默认值。[[ $- != *i* ]] && return
实际上执行了上面在注释中所说的:它检查是否设置了交互式标志。[[和]]使其为布尔值,因此以“ true”或“ false”结尾。“ false && return”使之继续执行“ true && return”使之执行返回。默认标志详细说明:
h表示“全部散列”:告诉bash记住通过查询PATH找到的命令的位置。
我是“互动”的:输入输入并返回输出。
m用于“监视器”:启用作业控制
B代表“括号扩展”。这使您可以使用大括号扩展
H是“历史扩展”的意思。这就是使您可以通过在历史记录中加上感叹号开头的编号来重新运行该命令的原因
顺便说说。我有 ...
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
基本上是一样的,但我认为更容易阅读。
基本上,这意味着“如果shell标志不包含小写字母i,则在此处停止函数/脚本”。
[[ ]]
表示bash中的条件表达式
$-
表示外壳标志。如果外壳是交互式的,它将包含“ i”(即,您可以键入命令,而不是它正在执行脚本)
!=
仅表示“不等于”。
*i*
是与任何包含“ i”的内容匹配的通配符模式
return
没有任何参数只是意味着停止当前函数或脚本的执行。
&&
是逻辑AND运算符。在这种情况下return
,仅当左侧的表达式为true时,才对右侧的表达式求值(执行)。因此,在许多编程语言中,它a && b
是的简写if a then b
-称为“短路评估”,当您使用它时,它会使编程老师感到疯狂:
我认为这就像说的那样:如果bash不在交互式shell中打开,则不要执行任何操作。
我不知道整个功能,但是如果您确实在TTY中打开了bash,则可能在该行下方设置了命令和标志。
$-
,*i*
以及它如何找出它的交互模式