Bash 中的 ${} 和 $() 有什么区别

问答Bash 中的 ${} 和 $() 有什么区别
王利头 管理员 asked 7 月 ago
3 个回答
Mark Owen 管理员 answered 7 月 ago

在 Bash 脚本中,${} 和 $() 符号用于访问和操作变量和命令输出。虽然它们看起来相似,但在功能和语法上却存在一些关键差异。

${} 变量展开

${} 用于展开变量,也就是引用变量的值。比如,如果我们有一个名为 myvar 的变量,值为 “Hello World!”,我们可以使用 ${myvar} 来访问其值。

“`bash
myvar=”Hello World!”
echo ${my
var}

“`

变量展开还可以用于执行更高级的操作,例如执行算术运算或使用字符串操作符。

“`bash
mynum=10
my
result=$(($mynum + 5))
echo ${my
result}

“`

$() 命令代换

$() 用于命令代换,即执行命令并获取其输出。比如,我们可以使用 $() 来捕获 ls 命令的输出并将其分配给一个变量。

“`bash
myfiles=$(ls)
echo ${my
files}

“`

与 ${} 不同,$() 允许我们在命令中传递参数或使用管道将多个命令的输出组合在一起。

“`bash
myfilteredfiles=$(ls | grep “.txt”)
echo ${myfilteredfiles}

“`

语法差异

除了功能差异外,${} 和 $() 在语法上也有所不同。

  • ${}:变量名必须紧跟美元符号,表示变量展开。
  • $():命令或表达式必须括在圆括号内,表示命令代换。

用途建议

一般来说,建议使用 ${} 来引用变量,因为它的语法更简洁、更易于阅读。而 $() 则适合在需要执行命令或捕获命令输出的情况下使用。

总结一下,${} 用于展开变量,而 $() 用于命令代换。两者在语法和功能上都有所不同,根据不同的使用场景选择合适的符号非常重要。

seoer788 管理员 answered 7 月 ago

在 Bash 编程中,$(){} 都是非常有用的语法结构,它们都可以用于执行命令和展开变量。但是,两者之间有一些关键区别,在不同的情况下使用它们会产生不同的结果。

$() 命令执行

$() 结构是一个命令执行结构。它允许你将命令作为字符串放入其中,然后将其执行。执行命令后,其输出将被捕获并存储在变量中。

例如:

bash
output=$(echo "Hello, world!")

在这个例子中,echo "Hello, world!" 命令被放入 $() 结构中,并执行。其输出 “Hello, world!” 被存储在 output 变量中。

{} 变量展开

{} 结构是一个变量展开结构。它允许你使用大括号将变量名括起来,然后将其值展开。展开后的值将替换大括号。

例如:

bash
name="John"
greeting="Hello, $name!"

在这个例子中,$name 被展开为 “John”,然后将其替换为大括号,从而形成最终的字符串 “Hello, John!”。

区别

$(){} 之间的主要区别在于它们的用途:

  • $() 用来执行命令并捕获其输出。
  • {} 用来展开变量。

此外,$() 是一个子 shell 结构,这意味着它会在当前 shell 之外创建一个新的子 shell 来执行命令。这可能会影响变量的可见性和其他 shell 行为。另一方面,{} 是一个本地结构,它不会创建子 shell。

选择哪一个?

在决定使用 $() 还是 {} 时,需要考虑以下因素:

  • 是否需要执行命令?如果需要执行命令并捕获其输出,则使用 $().
  • 是否需要展开变量?如果需要展开变量,则使用 {}.
  • 是否需要子 shell?如果需要在子 shell 中执行命令,则使用 $().

例子

以下是一些演示 $(){} 不同用途的例子:

使用 $() 执行命令:

“`bash

files=$(ls)
“`

使用 {} 展开变量:

“`bash

prefix=”myfile”
filename=”${prefix}
01.txt”
“`

使用 $() 创建子 shell:

“`bash

(export MY_VAR=123)
“`

通过理解 $(){} 之间的区别,你可以更有效地利用 Bash 编程的强大功能。

ismydata 管理员 answered 7 月 ago

在 Bash 编程中,${} 和 $() 都是用来进行变量展开的语法结构,但它们之间存在一些关键区别。了解这些区别对于有效地使用 Bash 至关重要。

${} 语法

${} 语法用于展开变量的值。变量名称用花括号括起来,例如 ${VARNAME}。变量展开将替换变量名称及其值。

$() 语法

$() 语法用于执行命令并展开其输出。命令用小括号括起来,例如 $(command)。命令展开将替换小括号及其执行结果。

主要区别

1. 功能

${} 用于展开变量值,而 $() 用于执行命令并展开其输出。

2. 变量作用域

${} 仅在当前 Bash shell 中展开变量值,而 $() 可以访问子 shell 中的变量值。

3. 命令执行

$() 会执行括号中的命令,而 ${} 不会。

4. 输出捕获

$() 可以捕获并展开命令的输出,而 ${} 不能捕获命令输出。

5. 引号

$() 中的命令必须用引号括起来,而 ${} 中的变量名称则不需要。

使用场景

${}

  • 访问已定义的变量值。
  • 组合字符串和变量值。
  • 对变量值执行算术或字符串操作。

$()

  • 执行命令并将其输出分配给变量。
  • 捕获命令的输出并将其用作另一个命令的参数。
  • 在子 shell 中执行命令。
  • 根据命令输出的条件执行操作。

示例

${} 示例:

“`bash

VAR=”hello”
echo ${VAR}world # 输出:helloworld
“`

$() 示例:

“`bash

DATE=$(date +%Y-%m-%d) # 执行 date 命令并捕获其输出
echo “Today’s date is $DATE” # 输出:Today’s date is 2023-03-08
“`

结论

${} 和 $() 都是 Bash 中展开变量和执行命令的有用工具。了解它们之间的区别对于编写健壮且高效的 Bash 脚本至关重要。通过明智地使用这些结构,你可以充分利用 Bash 的强大功能。

公众号