Linux /etc/profile中的Bash语法

Linux /etc/profile中的Bash语法,linux,bash,unix,sh,profile,Linux,Bash,Unix,Sh,Profile,我刚刚在我的/etc/profile中注意到这一行,我想知道这是什么意思,什么时候是真的 if [ "${-#*i}" != "$-" ]; then i迭代几个*.sh文件 很抱歉,如果这是一个愚蠢的问题,但正如你所能想象的,在谷歌中寻找大部分符号确实不是一个选项 谢谢 从手册页的选项部分: -i If the -i option is present, the shell is interactive. 从手册页的特殊参数部分: -i If the -i op

我刚刚在我的
/etc/profile
中注意到这一行,我想知道这是什么意思,什么时候是真的

if [ "${-#*i}" != "$-" ]; then
i
迭代几个
*.sh
文件

很抱歉,如果这是一个愚蠢的问题,但正如你所能想象的,在谷歌中寻找大部分符号确实不是一个选项


谢谢

从手册页的
选项部分:

-i        If the -i option is present, the shell is interactive.
从手册页的
特殊参数部分:

-i        If the -i option is present, the shell is interactive.
从手册页的
参数展开部分
中:

-i        If the -i option is present, the shell is interactive.
这个词被展开以产生一个模式,就像在路径名中一样 膨胀如果模式与值的开头匹配 参数,则展开的结果是展开的 具有最短匹配模式的参数值(“#” 大小写)或删除最长的匹配模式(“大小写”)。 如果参数为@或*,则应用图案移除操作 依次添加到每个位置参数,展开式为 结果列表。如果参数是下标的数组变量 对于@或*,模式移除操作应用于每个 依次是数组的成员,扩展是结果 名单

因此,
“${-#*i}”
表示展开
$-
变量,并从字符串开头移除字母
i
。然后比较该扩展
=
反对扩展
$-
(仅未修改同一变量)

当它们不相同时,这意味着第一次扩展删除了一些内容,这意味着字母
i
出现在
$-
的值中,这意味着(因为
-i
不是
set
的参数),
-i
参数被传递给shell,shell是一个交互式shell