[ "${-#*i}" != "$-" ] 在 sh 中做什么?

[ "${-#*i}" != "$-" ] 在 sh 中做什么?

/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 执行的标志(例如:himBHi表示 shell 是交互式的)。产生第一部分之后${-#*i}的部分(在我们的例子中)。如果没有in则产生。$-imBHi$-${-#*i}$-

这正是测试的目的:如果两个字符串不同,则意味着存在iin $-,换句话说,shell 是交互式的。

相关内容