我有一个文件 new.sh
i=5
i=$[i+1]
echo $i
当我执行 ./new.sh 时,它显示 6。但是当我执行“sh new.sh”时,它显示
$[i+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))。$[] 形式已弃用,应避免使用。
操作系统根据第一行决定它是什么类型的文件。做了:
#!/bin/bash
行为是不同的,因为当bash
作为 运行时sh
,它会关闭bash
特定功能并更接近POSIX shell标准。
bash
如果您希望您的代码在和下都能正常工作sh
,您将需要使用语法sh
子集编写代码。bash