在bash
每一个变量本质上是一个字符串(或数组或函数,但让我们来谈谈常规变量这里)。
根据测试命令的返回值来分析条件-返回值不是变量,而是退出状态。当您评估if [ ... ]
或if [[ ]]
或if grep something
类似的结果时,返回值0(不是字符串0,但退出状态0 =成功)表示true,其余值表示false(因此,与您在编译后的编程语言中所使用的完全相反,但是由于有一种成功的方法而有许多失败的方法,并且执行的预期结果通常是成功,因此,如果没有任何问题,将0用作最常见的默认结果)。这非常有用,因为任何二进制文件都可以用作测试-如果失败,则为false,否则为true。
true
和false
程序(通常由内置程序重写)只是有用的小程序,它们什么都不做- true
成功不执行任何操作,然后以0退出,而false
尝试执行不操作并“失败”,以1退出。听起来没什么意义,但是编写脚本非常方便。
至于如何传递真实性,则取决于您。仅将“ y”或“ yes”用于真实性和使用是很常见的if [ x"$variable" = x"yes" ]
(附加了虚拟字符串,x
因为如果$variable
碰巧长度为零,则可以防止创建if [ = "yes" ]
无法解析的伪指令)。简单地将一个空字符串用作false,并[ -z "$variable ]
测试其是否为零长度(或-n
使其为非零),也可能很有用。
无论如何,实际上很少需要传递布尔值bash
- exit
在发生故障时简单返回错误结果,或者返回有用的结果(如果出现错误,则返回零,然后测试空字符串),这种情况更为常见,大多数情况下直接从退出状态测试失败。
在您的情况下,您需要一个可以充当其他任何命令的函数(因此,成功返回0),因此最后一个选项似乎是正确的选择。
另外,您甚至可能不需要return
声明。如果函数足够简单,则可以使用以下事实:它仅返回函数中最后执行的命令的状态。所以你的功能可以简单地是
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
如果要测试是否存在设备节点(或grep /proc/mounts
以检查是否已安装?)。
help true ; help false ; help exit