在 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
,这很混乱。
有人对此有想法吗?
$x
在 echo
运行之前 展开,并将结果作为参数传递给 echo
。 echo
不在其环境中使用 x
的值。
在第一个示例中,read
在其环境中使用 IFS
的值来拆分它通过此处字符串接收的字符串。
这是另一种思考方式:
$ a="echo 100" $a
这等于:
$ a="echo 100"
因为在扫描行的时候,$a是空的。变量替换先发生,所以 $a 就消失了。
将此与非常相似的陈述进行比较:
$ a="echo 100"; $a # returns "100"
我看到了这样的代码:
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
,这很混乱。
有人对此有想法吗?
$x
在 echo
运行之前 展开,并将结果作为参数传递给 echo
。 echo
不在其环境中使用 x
的值。
在第一个示例中,read
在其环境中使用 IFS
的值来拆分它通过此处字符串接收的字符串。
这是另一种思考方式:
$ a="echo 100" $a
这等于:
$ a="echo 100"
因为在扫描行的时候,$a是空的。变量替换先发生,所以 $a 就消失了。
将此与非常相似的陈述进行比较:
$ a="echo 100"; $a # returns "100"