为什么不"让"使用" sh myscript"在Ubuntu上,当它与" ./ myscript"?

时间:2017-09-10 14:47:26

标签: linux bash shell unix

通过在sh./模式下运行以下脚本,在Ubuntu上获得不同的结果

#!/bin/bash
x=80
z=90
let "a=$x+$z"
echo $a

结果:

sh mode给了我"空白"输出,而./ mode产生170。

有任何解释吗?

1 个答案:

答案 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 ))