为什么在"./myscript"中,"让"与Ubuntu上的"sh myscript"一起工作?

Rea*_*ary 2 unix linux bash shell

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

#!/bin/bash
x=80
z=90
let "a=$x+$z"
echo $a
Run Code Online (Sandbox Code Playgroud)

结果:

sh mode给我"空白"输出,而./ mode产量170.

任何解释?

Cha*_*ffy 7

通过调用方法选择Shell

./mode尊重shebang,它指定您的脚本被调用bash.相比之下,sh mode显然使用sh,忽略了shebang.(. mode根本不运行新的shell,而是在您已经交互使用的同一个shell内的脚本中执行命令).


壳牌选择至关重要

let 是一个bash扩展,用于与pre-POSIX shell兼容.

/bin/sh由灰分导数实现的平台(例如Ubuntu)上,POSIX sh标准中未指定的功能非常少.

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

a=$(( x + z ))
Run Code Online (Sandbox Code Playgroud)