1

我有一个文件 new.sh

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

当我执行 ./new.sh 时,它显示 6。但是当我执行“sh new.sh”时,它显示

$[i+1]

作为输出。我只是想知道为什么,我需要一个适用于两者的代码。

4

3 回答 3

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))。$[] 形式已弃用,应避免使用。

于 2012-08-25T02:37:13.470 回答
0

操作系统根据第一行决定它是什么类型的文件。做了:

#!/bin/bash
于 2012-08-25T01:47:34.977 回答
0

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

bash如果您希望您的代码在和下都能正常工作sh,您将需要使用语法sh子集编写代码。bash

于 2012-08-25T01:58:43.603 回答