/ etc / profile中的Bash语法

时间:2014-11-19 19:03:43

标签: linux bash unix sh profile

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

if [ "${-#*i}" != "$-" ]; then

i遍历多个*.sh个文件。

很抱歉,如果这是一个愚蠢的问题,但正如您所想象的那样,在Google中查找大多数符号实际上不是一种选择。

谢谢!

1 个答案:

答案 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。