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"