如果在反引号中为变量分配了命令表达式,会发生什么

hel*_*hel 1 linux bash

下面是bash的代码:

a=`echo hello`
echo $a
Run Code Online (Sandbox Code Playgroud)

输出是:

你好

但我认为它应该是:

你好
0

Joh*_*136 6

你认为错了;-)

将命令放在反引号中会将右侧表达式的输出(stdout)分配给左侧的变量.

$? 为您提供命令的"输出状态"(或返回代码) - 也就是您期望的"0".

所以:

a=`echo hello`
Run Code Online (Sandbox Code Playgroud)

运行命令"echo hello"但不是回显到stdout,而是"回声"到变量a.所以a = whatever_the_command_would_have_written_to_stdout(在本例中为"hello") - 实际上没有任何内容写入stdout,因为它被`s"捕获"了

  • `a = \`echo hello \``转换为将变量a设置为运行命令`echo hello`的标准输出,或者正如你所看到的那样:`a = hello` (3认同)