此行在我/etc/rc.sysinit
在 linux 上的文件中:
[ -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
是一个逻辑“和”。
有关详细信息,请参阅 中的“条件表达式” man bash
。
the[
实际上是一个命令名本身,即相当于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
一些 shell 还具有[
内置命令(有些甚至[[
提供了额外的选项)。不过,与大多数内置命令一样,您也会在文件系统中找到一个实现。
这表示 :
如果您可以阅读/proc/mdstat
并且您/dev/md/md-device-map
可以阅读,则运行/sbin/mdadm -IRs
看help test
笔记
[[
是一个与命令类似(但比[
命令更强大)的 bash 关键字。请参阅http://mywiki.wooledge.org/BashFAQ/031和http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
除非您正在编写 POSIX sh,否则我们建议使用[[
.