在Bash双引号中用*做乘法是否需转义?为何转义会报错?
为什么Bash中双引号内的乘法运算符
*不需要转义,转义反而报错? 核心原因拆解
Bash双引号抑制通配符展开
在Bash的语法规则里,双引号""会抑制大部分元字符的特殊含义,其中就包括通配符*。也就是说,当*处于双引号内部时,它不会被当作文件名匹配的通配符去展开当前目录下的文件,而是直接作为普通字符传递给后续命令。所以执行echo "scale=2; 10 * 3" | bc时,bc接收到的是完整的乘法表达式,自然能正确计算出结果30。转义后的
\*会被bc误解析
当你在双引号内写\*时,Bash不会把这个\当作*的转义符(双引号中\仅对$、`、"、\和换行符有转义作用),而是会将\和*两个字符原封不动地传递给bc。而在bc的语法中,\是续行符,仅允许出现在行尾用来拼接多行代码;当它出现在行内时,bc会认为需要等待下一行的输入,直到遇到EOF(管道中没有更多内容),就会触发EOF encountered in a comment.的报错,同时\*也不是bc认可的乘法运算符写法,因此还会伴随语法错误提示。
内容的提问来源于stack exchange,提问作者Sourav Bhattacharya
相关产品推荐
相关产品推荐

