当我直接执行bash脚本并通过sh执行结果时,执行结果会有所不同

时间:2012-08-25 01:42:53

标签: bash sh increment

我有一个文件new.sh

i=5
i=$[i+1]
echo $i

当我执行./new.sh时,它会显示6.但是当我执行" sh new.sh"时,它会显示

$[i+1]

作为输出。我只是想知道为什么,而且我需要一个可以兼顾两者的代码。

3 个答案:

答案 0 :(得分:1)

许多Linux发行版使用dash作为脚本的标准shell,因此/ bin / sh只是/ bin / dash的符号链接,它更轻量级,但与bash相比滞后于某些功能。检查:

ls -l /bin/sh

如果要编写POSIX兼容脚本,则应使用foo = $ n; $((n = n + 1))而不是foo = $((n ++))和foo = $((n = n + 1))而不是foo = $((++ n))。表格$ []已弃用,应避免使用。

答案 1 :(得分:0)

操作系统根据第一行决定文件的类型。成功:

#!/bin/bash

答案 2 :(得分:0)

行为不同,因为当bash作为sh运行时,它会关闭bash - 特定功能并更接近POSIX shell标准。

如果您希望代码在bashsh下运行相同,则需要在sh语法的bash子集中编写代码。