<分区>
我查看了 bash 手册页,[[
说它使用条件表达式。然后我查看了条件表达式部分,它列出了与 test
(和 [
)相同的运算符。
所以我想知道,Bash 中的 [
和 [[
有什么区别?
标签 bash
<分区>
我查看了 bash 手册页,[[
说它使用条件表达式。然后我查看了条件表达式部分,它列出了与 test
(和 [
)相同的运算符。
所以我想知道,Bash 中的 [
和 [[
有什么区别?
最佳答案
[[
是 bash 对 [
的改进命令。如果您编写以 bash 为目标的脚本,它有几个增强功能,使它成为更好的选择。我最喜欢的是:
它是 shell 的语法特征,所以它有一些特殊的行为 [
没有。您不再需要疯狂地引用变量,因为 [[
更直观地处理空字符串和带空格的字符串。例如,使用 [
你必须写
if [ -f "$file" ]
正确处理空字符串或包含空格的文件名。与 [[
引号是不必要的:
if [[ -f $file ]]
因为它是一个句法特征,所以它可以让你使用 &&
和 ||
bool 测试运算符和 <
和 >
用于字符串比较。 [
无法执行此操作,因为它是常规命令并且 &&
, ||
, <
, 和 >
不会作为命令行参数传递给常规命令。
它有一个美妙的=~
用于进行正则表达式匹配的运算符。与 [
你可能会写
if [ "$answer" = y -o "$answer" = yes ]
与 [[
你可以这样写
if [[ $answer =~ ^y(es)?$ ]]
它甚至可以让您访问存储在 BASH_REMATCH
中的捕获组.例如,${BASH_REMATCH[1]}
如果您在上方键入完整的"is",则为“es”。
您可以免费获得模式匹配,也就是 globbing。也许您对如何输入 yes 没有那么严格。如果用户输入 y-anything,也许你没问题。让你满意:
if [[ $ANSWER = y* ]]
请记住,它是一个 bash 扩展,因此如果您正在编写与 sh 兼容的脚本,那么您需要坚持使用 [
。 .确保你有 #!/bin/bash
如果你使用双括号,你的脚本的 shebang 行。
关于bash - Bash 中的 [ 和 [[ 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3427872/