我有一个文件new.sh
i=5
i=$[i+1]
echo $i
当我执行./new.sh时,它会显示6.但是当我执行" sh new.sh"时,它会显示
$[i+1]
作为输出。我只是想知道为什么,而且我需要一个可以兼顾两者的代码。
答案 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标准。
如果您希望代码在bash
和sh
下运行相同,则需要在sh
语法的bash
子集中编写代码。