通过在sh
和./
模式下运行以下脚本,在Ubuntu上获得不同的结果
#!/bin/bash
x=80
z=90
let "a=$x+$z"
echo $a
结果:
sh mode
给了我"空白"输出,而./ mode
产生170。
有任何解释吗?
答案 0 :(得分:6)
./mode
尊重shebang,它指定使用bash
调用您的脚本。相比之下,sh mode
明确使用sh
,而忽略了shebang。 (. mode
根本不运行新的shell,但是在您已经交互使用的同一个shell中的脚本中执行命令。
let
是一个bash扩展,用于与POSIX之前的shell兼容。
在一个平台(例如Ubuntu)上,/bin/sh
由灰分导数实现,POSIX sh标准中没有指定的功能很少。
要以与所有符合POSIX标准的shell兼容的方式执行算术运算(来自最初的1992年POSIX sh标准发布),请使用以下语法:
a=$(( x + z ))