$( ... ) 在 shell 中是什么意思?

Hac*_*erN 2 shell bash shell-script

我不明白美元符号有什么作用。特别是在这种情况下:

for url in  $(cat   example.txt);   do  host    $url;   
Run Code Online (Sandbox Code Playgroud)

jes*_*e_b 5

Bash 参考手册 Bash 手册

3.2.4.3 分组命令

Bash 提供了两种方法来将要作为一个单元执行的命令列表进行分组。当命令被分组时,重定向可以应用于整个命令列表。例如,列表中所有命令的输出可能被重定向到单个流。

()

( list )

将命令列表放在括号之间会导致创建子 shell 环境(请参阅命令执行环境),并且列表中的每个命令都将在该子 shell 中执行。由于列表是在子shell 中执行的,因此子shell 完成后变量赋值不再有效。

这与 the 不同,$因为它随后成为命令替换:

3.5.4 命令替换

命令替换允许命令的输出替换命令本身。当一个命令被如下包围时,会发生命令替换:

$(command)

3.2.4.1 循环结构

for

for 命令的语法是:

for name [ [in [words …] ] ; ] do commands; done

展开词,并对结果列表中的每个成员执行一次命令,名称绑定到当前成员。如果 'in words' 不存在,则 for 命令为每个设置的位置参数执行一次命令,就好像已经指定了 'in "$@"'(参见特殊参数)。返回状态是执行的最后一个命令的退出状态。如果字的扩展中没有项,则不执行任何命令,返回状态为零。

假设您的 example.txt 包含以下内容:

www.google.com
www.youtube.com
www.facebook.com
Run Code Online (Sandbox Code Playgroud)

您的命令将执行以下操作:

url=www.google.com
host www.google.com

url=www.youtube.com
host www.youtube.com

url=www.facebook.com
host www.facebook.com
Run Code Online (Sandbox Code Playgroud)

host 是返回 URL 的 IP 地址的命令。