通过在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 ))