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

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

结果:
sh mode给我“空白”输出,而./ mode产生170。

有什么解释吗?

最佳答案

通过调用方法选择 shell
./mode遵循shebang,它指定使用bash调用您的脚本。相比之下,sh mode显式使用sh代替,而忽略了shebang。 (. mode根本不运行新的Shell,但会在您已经以交互方式使用的同一Shell中执行脚本中的命令)。

为什么选择 shell 牌很重要
let是bash扩展,用于与POSIX之前的shell兼容。

在通过灰分派(dispatch)生实现/bin/sh的平台(例如Ubuntu)上,几乎没有POSIX sh标准未指定的功能可用。

要以与所有POSIX兼容的shell兼容的方式执行算术(从POSIX sh标准的1992年最初发布),请使用以下语法:

a=$(( x + z ))

10-08 08:08
查看更多