/etc/profile
我在 CentOS 机器上发现了这段可爱的代码片段:
for i in /etc/profile.d/*.sh ; do
if [ -r "$i" ]; then
if [ "${-#*i}" != "$-" ]; then
. "$i"
else
. "$i" >/dev/null
fi
fi
done
我知道它.sh
从 加载文件/etc/profile.d
,但我对最后一个 if 语句感到困惑if [ "${-#*i}" != "$-" ]
。这个语法是做什么的?我什至不知道在哪里查找它。
答案1
基本上,[ "${-#*i}" != "$-" ]
检查您的 shell 是否是交互式的。
$-
包含用于 shell 执行的标志(例如:himBH
,i
表示 shell 是交互式的)。产生第一部分之后${-#*i}
的部分(在我们的例子中)。如果没有in则产生。$-
i
mBH
i
$-
${-#*i}
$-
这正是测试的目的:如果两个字符串不同,则意味着存在i
in $-
,换句话说,shell 是交互式的。