我正在努力了解 bash,但正在努力解决一些核心基础问题。
我可以看到一个算术语句是由双括号定义的
((5-3))
Run Code Online (Sandbox Code Playgroud)
但如果我尝试echo这样做或我们这样做,shift我会得到一个错误
echo ((5-3))
-bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
在示例中,它表明在它前面加上一个美元符号会使它工作
echo $((5-3))
Run Code Online (Sandbox Code Playgroud)
这是为什么?语法看起来好像我将算术应用于空白变量,然后应用于echo函数。为什么我不能将算术结果传递给echo函数?在其他情况下,我怎么知道什么时候用美元符号作为算术语句的前缀。
请原谅我的无知。我已经习惯了 Web 开发语言,而 Bash 是如此不同。
((...))是一个算术表达式。
$((...))是算术展开式。
不同之处在于表达式本身就是一个单位,而扩展只是被一个值替换。
这与两者的区别是一回事。
$ echo foo
foo
Run Code Online (Sandbox Code Playgroud)
和
$ $(echo foo)
-bash: foo: command not found
Run Code Online (Sandbox Code Playgroud)