此行在Linux上的/etc/rc.sysinit
文件中:
[ -r /proc/mdstat -a -r /dev/md/md-device-map ] && /sbin/mdadm -IRs
我对它实际完成的事情不太感兴趣,而不是语法的工作方式。
它测试是否存在文件/proc/mdstat
和/dev/md/md-device-map
,并且可读(-r
),并且如果是的,则执行/sbin/mdadm -IRs
。
方括号是程序test
的替代名称(或bash替换),可以测试很多东西,例如文件的存在。-a
是逻辑"one_answers"。
有关更多详细信息,请参见man bash
中的"条件表达式"。
[
实际上是命令名称本身,等效于test
命令。因此,使用man test
找出-r
的含义。
根据您的系统,您可能会在/usr/bin
中找到[
:
$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 37000 Oct 5 2011 /usr/bin/[
否则可能是一个符号链接:
$ ls -l /usr/bin/[
-rwxr-xr-x 1 root root 4 Oct 5 2011 /usr/bin/[ -> test
有些外壳也将[
作为内置命令(有些甚至具有[[
,提供了其他选项)。与大多数内置命令一样,您还将在文件系统中找到实现。
这意味着:
如果您可以读取/proc/mdstat
,并且/dev/md/md-device-map
是可以读取的,则运行/sbin/mdadm -IRs
请参阅help test
注意
[[
是一个bash关键字,类似于(但比) [
命令。请参阅http://mywiki.wooledge.org/bashfaq/031和http://mywiki.woolge.org/bashguide/testsandconditionals
除非您为Posix SH写作,我们建议[[
。