在 Bash 中,为什么 `x=100 echo $x` 不打印任何东西?

In Bash, why `x=100 echo $x` doesn't print anything?

我看到了这样的代码:

fqdn='computer1.daveeddy.com'

IFS=. read hostname domain tld <<< "$fqdn"
echo "$hostname is in $domain.$tld"
# => "computer1 is in daveeddy.com"

我认为它有效,因为 IFS 在第三行被分配给 .。所以我试了这个:

x=100  echo $x

但发现 bash 不打印任何内容,而我希望它会打印 100..

此外,我发现 x=100 echo $x; echo $x 什么都不打印,而 x=100; echo $x 打印 100,这很混乱。

有人对此有想法吗?

$xecho 运行之前 展开,并将结果作为参数传递给 echoecho 不在其环境中使用 x 的值。

在第一个示例中,read 在其环境中使用 IFS 的值来拆分它通过此处字符串接收的字符串。

这是另一种思考方式:

$ a="echo 100" $a

这等于:

$ a="echo 100"    

因为在扫描行的时候,$a是空的。变量替换先发生,所以 $a 就消失了。

将此与非常相似的陈述进行比较:

$ a="echo 100"; $a   # returns "100"