bash变量分配中的单括号


11

我想知道bash中的单个括号。我知道它们用于在子shell中执行命令,并且它们用于创建数组,但是它们还用于其他吗?

引起我注意的一件事是,当您使用in变量赋值时,例如

var=(hello)
echo $var    # hello

bash不会产生错误或任何东西,并且输出与

var=hello

这两个变量定义是相同的还是有区别的?

Answers:


14

例如,在您的情况下,括号()被用作数组定义

a=(one two three)   # array definition
echo "${a}"         # print first element of array a
echo "${a[0]}"      # print first element of array a
echo "${a[1]}"      # print *second* element of array a
echo "${#a[@]}"     # print number of elements in array a

如果将单个变量放入数组中,则只有一个包含单个元素的数组。


要回答您的另一个问题,括号是否还用于其他用途:在许多情况下,bash它们可以与其他字符结合使用:

  • 命令替换: $()
  • 流程替代:<()>()
  • 子壳: (command)
  • 算术评估: (())
  • 函数定义: fun () { echo x; }
  • 在glob模式列表:?()*()+()@()!()仅当extglob值为Enable

1
是的,我实际上没有想到这一点。但是var=(1 2 3); echo $var是一样的var=(1 2 3); echo ${var[0]}吗?
Mattias

是的,结果bash是一样的。
jimmij 2015年

我们需要""echo "${a}"
nn0p

@ nn0p是的,如果我们不想在上执行split和glob操作,则可以a。考虑例如a=*,然后尝试echo $aecho "$a"
jimmij
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.