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
查看该程序所在的位置
我们使用大括号 {}
来表示变量表达式,例如
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
查看该程序所在的位置