字符串是算术表达式吗?

Tim*_*Tim -4 shell bash arithmetic

在 Bash 中,我使用了一个需要算术表达式的字符串:

$ (( hello ))
$ echo $?
1

$ echo $(( hello ))
0

$ let aaa=hello
$ echo $?
1
$ echo $aaa
0
Run Code Online (Sandbox Code Playgroud)

没有报告错误。那么字符串是算术表达式吗?如果是,字符串的值是否始终为 0?

我的问题来自评论为什么命令不能与以赋值开头的命令一起工作?

Dop*_*oti 6

在 bash 算术表达式(例如$((3+2)))中,您可以使用变量,就像使用 bash writ large 一样。但是,在这种特殊情况下,您不必使用$字符来表示变量:

ghoti ~$ foo=5
ghoti ~$ echo $((foo))
5
ghoti ~$ echo $((foo*2))
10
ghoti ~$ echo $(($foo*2))
10
Run Code Online (Sandbox Code Playgroud)

正如对您的问题的评论中所述,hello在您的情况下,不是您认为的字符串,而是值为零的未定义变量的名称。

  • 注意 `foo=1+1` 时的区别 (2认同)