问题描述
我的 .bashrc
中有这条线,我想知道这到底是什么意思
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
最佳办法
-
$-
表示 ‘current flags’。 -
echo $-
返回 “himBH”。这些都是默认值。 -
所以…
[[ $- != *i* ]] && return
实际上做了上面评论中所说的:它检查是否设置了交互标志。 [[ 和 ]] 使它成为一个布尔值,因此它以 “true” 或 “false” 结束。 “false && return” 让它继续 “true && return” 让它执行返回。
更详细地解释了默认标志:
h 代表 “hash all”:这告诉 bash 记住它通过查询 PATH 找到的命令的位置。
i 用于 “interactive”:输入输入 &取回输出。
m 用于 “monitor”:这将启用作业控制
B 代表 “brace expand”。这允许您使用大括号扩展
H 代表 “history expand”。这使您可以通过在其编号前加上感叹号来从历史记录中重新运行命令
顺便一提。我有 …
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
我假设基本上做相同但更容易阅读。
次佳办法
基本上它的意思是“如果 shell 标志不包含小写 i,则在此处停止函数/脚本”。
[[ ]]
表示 bash 中的条件表达式
$-
表示 shell 标志。如果 shell 是交互式的,它将包含 “i”(即,您可以键入命令,而不是执行脚本)
!=
简单的意思是“不等于”。
*i*
是匹配任何包含 “i” 的通配符模式
return
没有任何参数只是意味着停止当前函数或脚本的执行。
&&
是逻辑 AND 运算符。右侧的表达式,在本例中为 return
,只有在左侧的表达式为真时才会被计算(执行)。所以在许多编程语言中,a && b
是 if a then b
的简写——这被称为“短路评估”,当你使用它时,它会让编程老师发疯:D