我刚注意到/etc/profile
中的这一行,我想知道这是什么意思,什么时候是真的。
if [ "${-#*i}" != "$-" ]; then
i
遍历多个*.sh
个文件。
很抱歉,如果这是一个愚蠢的问题,但正如您所想象的那样,在Google中查找大多数符号实际上不是一种选择。
谢谢!
答案 0 :(得分:7)
从联系人页面的OPTIONS
部分:
-i If the -i option is present, the shell is interactive.
从联系人页面的Special Parameters
部分:
- Expands to the current option flags as specified upon invoca- tion, by the set builtin command, or those set by the shell itself (such as the -i option).
从联系人页面的Parameter Expansion
部分:
${parameter#word} ${parameter##word}
这个词被扩展为产生一个与路径名一样的模式 扩张。如果模式匹配值的开头 参数,然后扩展的结果是扩展的 具有最短匹配模式的参数值(''''' case)或删除最长的匹配模式(''##''case)。 如果参数为@或*,则应用模式删除操作 依次对每个位置参数进行扩展 结果清单。如果参数是下标的数组变量 使用@或*,模式删除操作将应用于每个 依次是数组的成员,扩展是结果 列表。
所以"${-#*i}"
说扩展$-
变量并从字符串的开头删除,直到字母i
。然后将该扩展与!=
与$-
的扩展进行比较(同一变量仅未修改)。
当它们不相同时,这意味着第一个扩展删除了一些内容,这意味着i
中出现了$-
字母,这意味着(因为-i
不是一个参数到set
)-i
参数传递给shell而shell是一个交互式shell。