小编z14*_*z14的帖子

命令替换中的变量赋值

假设我们有一个命令输出一个变量赋值字符串,比如'var = foo',如果我把这个命令放在Command Substitution看起来像 $(echo var=foo),它会导致'command not found'错误.

[223212 dot@anne ~]$ var=foo
[223226 dot@anne ~]$
[223230 dot@anne ~]$ $(var=foo)
[223235 dot@anne ~]$
[223236 dot@anne ~]$ $(echo var=foo)
bash: var=foo: command not found
[223240 dot@anne ~]$
[224909 dot@anne ~]$ $(echo ls)
a    b    c   d    
[225036 dot@anne ~]$
[225110 dot@anne ~]$ $(echo $(var=foo))
[225116 dot@anne ~]$
Run Code Online (Sandbox Code Playgroud)

既然我们可以直接将变量赋值放在这样的命令替换中$(var=foo)(尽管我认为它没有意义),并且也$(echo ls)按预期工作,为什么在命令替换中输出赋值会导致错误?

这是man bash关于命令替换:

命令替换允许输出命令来替换命令名称.

Bash通过在子shell环境中执行命令并使用命令的标准输出替换命令替换来执行扩展,并删除任何尾随换行符.

据我所知,$(echo var=foo)应该是取代var=foo就像$(var=foo).

我弄错了吗?

bash

4
推荐指数
1
解决办法
122
查看次数

标签 统计

bash ×1