Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash中的反勾号与大括号_Bash_Command Substitution - Fatal编程技术网

Bash中的反勾号与大括号

Bash中的反勾号与大括号,bash,command-substitution,Bash,Command Substitution,当我开始回答时,我打算使用${}符号,因为我在这里已经看到很多次了,所以它比反勾号更好 然而,当我尝试 joulesFinal=${echo $joules2 \* $cpu | bc} 我明白了 -bash: ${echo $joules * $cpu | bc}: bad substitution 但是 很好。那么我还需要做哪些更改呢?当您使用${}(大括号)时,`被称为命令替换,相当于$()(括号) 因此,所有这些表达式都是相等的,表示“解释放置在其中的命令”: 而${}表达式用于变量

当我开始回答时,我打算使用
${}
符号,因为我在这里已经看到很多次了,所以它比反勾号更好

然而,当我尝试

joulesFinal=${echo $joules2 \* $cpu | bc}
我明白了

-bash: ${echo $joules * $cpu | bc}: bad substitution
但是


很好。那么我还需要做哪些更改呢?

当您使用
${}
(大括号)时,
`
被称为命令替换,相当于
$()
(括号)

因此,所有这些表达式都是相等的,表示“解释放置在其中的命令”:

${}
表达式用于变量替换

但是请注意,backticks是不推荐使用的,而
$()
与POSIX兼容,因此您应该更喜欢后者


manbash

命令替换允许命令的输出替换 命令名。有两种形式:

          $(command)
   or
          `command`

而且,
`
更难处理,例如,您不能嵌套它们。参见下面的注释,也可参见。

在特定情况下,它们的行为略有不同:

$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"

所以反勾号会悄悄地删除双引号。

对于简单的算术,只需使用Bash的内置工具即可
joulesFinal=$((焦耳2*cpu))
@tripleee最初的问题涉及非整数算术,因此内置函数无法工作相关帖子:。我已经调查过了,我不得不承认backtics确实与标准兼容。但是,bash不赞成使用它们,而且处理(+1)时,
$()
更好。。。在中也没有发现“真正的”弃用,这意味着在即将发布的版本中将删除backtics。似乎使用
$()
只是首选的方法。抱歉搞混了:)没问题,@hek2mgl,我觉得很有趣。我有时在这里读到过,所以它被弃用了,所以这样想是很常见的(我甚至认为是这样)。但对我来说,使用
$()
而不是“``最重要的原因是,第一种字体可以嵌套,而第二种不允许。即使不嵌套,在许多控制台字体中也很容易忽略反勾号<代码>$()更不用说了。你可以用“``”嵌套,这太难看了。“echo`echo\`echo abc\``有效。有趣的例子。我怀疑$()的内容是在外部字符串处理其特殊字符之前运行的,这与使用反引号的情况相反。如果要使用反引号并保留引号,
echo“`echo\\\”test\\\”`
将起作用,因为外部字符串解析需要对bash斜杠转义字符进行转义,以便将其保留在内部命令中。这就是我喜欢bash的原因。。。说真的,如果我的狂欢超过5行。。。换个别的,别的什么都行。我试图停止制作新的sh脚本作为我的新年决心,但没有成功。例外情况是bash_别名。。。我喜欢那东西
          $(command)
   or
          `command`
$ echo "`echo \"test\" `"
test
$ echo "$(echo \"test\" )"
"test"