bash变量赋值中的单括号

Mat*_*ias 17 bash array

我想知道 bash 中的单括号。我知道它们用于在子 shell 中执行命令以及它们用于创建数组,但它们是否用于其他任何用途?

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

var=(hello)
echo $var    # hello
Run Code Online (Sandbox Code Playgroud)

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

var=hello
Run Code Online (Sandbox Code Playgroud)

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

jim*_*mij 21

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

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
Run Code Online (Sandbox Code Playgroud)

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


回答你的另一个问题括号是否也用于其他任何东西:有很多情况bash与其他字符结合使用,它们可以用作:

  • 命令替换: $()
  • 过程替换:<()>()
  • 子外壳: (command)
  • 算术评估: (())
  • 函数定义: fun () { echo x; }
  • glob 中的模式列表:?(), *(), +(), @(), !()仅当extglob启用时