【发布时间】:2023-02-07 21:36:46
【问题描述】:
根据 bash 手册,没有语法差异。另一方面,bash-parser 在处理算术表达式时似乎对此有不同的看法:
$ echo "$BASH_VERSION"
5.2.15(1)-release
$ echo $((""))
0
$ echo $((''))
bash: '': syntax error: operand expected (error token is "''")
有关的:
【问题讨论】:
-
标记化和评估在算术表达式中的工作方式似乎略有不同,这并不特定于空字符串。比较
echo $(( 1, '0' ))和echo $(( 1, "0" ))(特别注意错误信息)。 -
$(( espression )) 表达式进行与双引号内相同的扩展,但表达式中的双引号字符未被特殊处理并被删除。所以它应该像“''”和阅读shell-expansion我发现:执行这些扩展后,原始单词中存在的引号字符将被删除,除非它们自己被引用(引号删除)。这可以解释为什么评估单引号。
-
(error token is "'0' ")有趣的是,它将'之后的空格作为令牌的一部分。我想知道 POSIX 怎么说。 -
@Lety 如果您将其添加为答案,那么我将删除我的。我只是偶然发现了同样的事情。
-
@kvantour 完成了,谢谢
标签: bash