shell 脚本中大括号 {} 和方括号 () 的区别

Difference between braces {} and brackets () in shell scripting

我们使用大括号 {} 来表示变量表达式,例如

NAME="test"

FILE_NAME=${NAME}file

但是我不明白我们在哪些场景下使用括号() 说 nslookup $(hostname) 仅适用于 () 括号。

谁能解释一下?

首先是小毛病:

  • 括号[]
  • 括号()
  • 大括号{}
  • (双)引号 ""
  • (单)引号(撇号)''
  • 反引号``(与波浪号相同~键)

大括号在 BASh 脚本中用于复杂的变量扩展。考虑字符串连接:

STR="hello"
STR2=$STR

STR2 的计算结果为 "hello"。如果你想让它变成 "helloWorld" 的样子怎么办?做类似 STR2="$STR2World" 的事情是行不通的,所以你使用大括号,即:STR2="${STR}World".

使用方括号,类似于反引号`,将它们之间的文本扩展为命令的文本输出。

如果您想将当前时间存储为字符串怎么办?

STR2=$(date)

现在 STR2 存储字符串 "Thu May 7 09:32:06 PDT 2015".

Additionally, you can use parentheses to execute something in a subshell, 这可能会影响您的环境、PID 等。对于需要 "throwaway" 环境且必须 track/restore 环境变量、目录通过 pushd/popd 而不是 cd,等等

使用括号 ( 执行某些操作。恰好有一个名为 hostname 的程序 - 所以 $(hostname) 将执行它。

尝试which hostname查看该程序所在的位置