Bash 反引号与括号

RKA*_*RKA 6 linux bash shell command-line

我读到命令替换的经典形式使用反引号,并且 (...) 形式已经取代了命令替换的反引号。然而,下面的代码会产生不同的输出。有什么不同 ?

#backticks.sh
#!/bin/bash
a=`echo Hello!`   # Assigns result of 'echo' command to 'a' ...
echo $a   # output: Hello!
Run Code Online (Sandbox Code Playgroud)
#parenthesis.sh
#!/bin/bash
a=(echo Hello!)   # Assigns result of 'echo' command to 'a' ...
echo $a  # output: echo 
Run Code Online (Sandbox Code Playgroud)

小智 5

你在这里缺少的是$

bash 上有两种形式的命令替换,反引号(如您所例示)以及用 括起来$(command)

你应该使用的是:

#!/bin/bash

a=$(echo Hello!)

echo $a
Run Code Online (Sandbox Code Playgroud)

  • 并扩展解释: `a=(echo Hello!)` 将变量 `a` 声明为包含 2 个元素“echo”和“Hello!”的*数组*。对于数组,“echo $a”相当于“echo ${a[0]}”(数组的第一个元素) (5认同)