gpt4 book ai didi

bash - 如何使用双括号或单括号、圆括号、花括号

转载 作者:太空宇宙 更新时间:2023-11-03 17:09:46 27 4
gpt4 key购买 nike

我对 Bash 中方括号、括号、花括号的用法以及它们的双重或单一形式之间的区别感到困惑。有明确的解释吗?

最佳答案

在 Bash 中,test[ 是 shell 内置函数。

double bracket ,这是一个 shell 关键字,可启用其他功能。例如,您可以使用 &&|| 而不是 -a-o 并且有一个正则表达式匹配运算符 =~.

此外,在一个简单的测试中,双方括号的计算速度似乎比单个方括号快得多。

$ time for ((i=0; i<10000000; i++)); do [[ "$i" = 1000 ]]; done

real 0m24.548s
user 0m24.337s
sys 0m0.036s
$ time for ((i=0; i<10000000; i++)); do [ "$i" = 1000 ]; done

real 0m33.478s
user 0m33.478s
sys 0m0.000s

除了分隔变量名外,大括号还用于parameter expansion。所以你可以做这样的事情:

  • 截断变量的内容

      $ var="abcde"; echo ${var%d*}
    abc
  • 进行类似于sed

    的替换
      $ var="abcde"; echo ${var/de/12}
    abc12
  • 使用默认值

      $ default="hello"; unset var; echo ${var:-$default}
    hello
  • 还有几个

此外,大括号扩展会创建通常在循环中迭代的字符串列表:

$ echo f{oo,ee,a}d
food feed fad

$ mv error.log{,.OLD}
(error.log is renamed to error.log.OLD because the brace expression
expands to "mv error.log error.log.OLD")

$ for num in {000..2}; do echo "$num"; done
000
001
002

$ echo {00..8..2}
00 02 04 06 08

$ echo {D..T..4}
D H L P T

请注意,前导零和增量功能在 Bash 4 之前不可用。

感谢 gboffi 提醒我有关大括号扩展的信息。

双括号用于 arithmetic operations :

((a++))

((meaning = 42))

for ((i=0; i<10; i++))

echo $((a + b + (14 * c)))

它们使您能够省略整数和数组变量上的美元符号,并在运算符周围包含空格以提高可读性。

裸双括号 ((...)) 如果括起来的表达式的值不为零,则返回 0 (true),否则返回 1 (false),所以:

$ ((2 + 3 - 5)) || echo "last command returned 1"
last command returned 1
$ ((2 + 3 - 7)) && echo "last command returned 0"
last command returned 0

单括号也用于array指标:

array[4]="hello"

element=${array[index]}

右侧的(大多数/全部?)数组引用需要大括号。

ephemient 的 评论提醒我括号也用于子 shell。并且它们用于创建数组。

array=(1 2 3)
echo ${array[1]}
2

关于bash - 如何使用双括号或单括号、圆括号、花括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652680/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com