我查看了 bash 手册页和[[
说它使用条件表达式。然后我查看了条件表达式部分,它列出了与test
(and [
).
所以我想知道,有什么区别[
and [[
在巴什?
[[
bash 的改进是[
命令。它具有多项增强功能,如果您编写针对 bash 的脚本,它会成为更好的选择。我最喜欢的是:
-
它是 shell 的一个语法特征,因此它有一些特殊的行为:[
没有。您不再需要像 mad 这样引用变量,因为[[
更直观地处理空字符串和带有空格的字符串。例如,与[
你必须写
if [ -f "$file" ]
正确处理空字符串或带空格的文件名。和[[
引号是不必要的:
if [[ -f $file ]]
因为它是一个语法功能,所以它允许您使用&&
and ||
用于布尔测试的运算符和<
and >
用于字符串比较。[
无法执行此操作,因为它是常规命令并且&&
, ||
, <
, and >
不会作为命令行参数传递给常规命令。
-
它有一个美妙的=~
用于进行正则表达式匹配的运算符。和[
你可能会写
if [ "$answer" = y -o "$answer" = yes ]
With [[
你可以写成
if [[ $answer =~ ^y(es)?$ ]]
它甚至可以让您访问它存储的捕获组BASH_REMATCH
。例如,${BASH_REMATCH[1]}
如果您在上面输入完整的“yes”,则将是“es”。
-
您可以免费获得模式匹配(又称通配符)。也许您对如何输入 yes 不太严格。如果用户输入 y-任何内容,也许你没问题。为您提供帮助:
if [[ $ANSWER = y* ]]
请记住,它是 bash 扩展,因此如果您正在编写与 sh 兼容的脚本,那么您需要坚持使用[
。确保您拥有#!/bin/bash
如果您使用双括号,则为您的脚本添加 shebang 行。
See also
- Bash 常见问题解答 - “test、[ 和 [[ 之间有什么区别?” http://mywiki.wooledge.org/BashFAQ/031
- Bash 实践 - Bash 测试 http://mywiki.wooledge.org/BashGuide/Practices#Bash_Tests
- 服务器故障 - bash 中的双括号和单括号有什么区别? https://serverfault.com/questions/52034/what-is-the-difference-between-double-and-single-square-brackets-in-bash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)