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

时间:2015-05-07 16:27:43

标签: shell brackets braces

我们使用大括号{}作为变量表达式,如

NAME="test"

FILE_NAME=${NAME}file

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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:10)

轻微的挑剔:

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

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

STR="hello"
STR2=$STR

STR2评估为“你好”。如果你想让它像“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等。对于您希望“一次性”环境必须通过pushd / {{跟踪/恢复环境变量,目录的情况非常有用1}}而不是popd等。

答案 1 :(得分:4)

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

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