为什么以下脚本失败了?

为什么以下脚本失败了?
#!/bin/sh
declare -a LIST= ('a' 'b' 'c' )

在 Ubuntu 上失败,其/bin/sh软链接到/bin/dash

我怎样才能声明可在所有类型的 shell 上支持的列表?

答案1

简短的回答是不能。这就是为什么第一行(应该有一个前导#,如果你将文本写成代码,它就会出现)允许你指定与之相关的 shell。特别是,它csh与 Bourne (sh)、Korn (ksh) 和 Bourne-again (bash) 非常不同。

但是,sh/ksh/bash 对于常用功能具有类似的语法,因此sh脚本应该在 ksh/bash 上运行。dash似乎与 Bourne 大致相同,但数组是 bash/ksh 扩展,在 sh/dash 中不存在。

只需将第一行更改为#!/bin/bash,就不会有问题。

有很多兼容性信息https://wiki.ubuntu.com/DashAsBinSh,并附有详细的差异列表。

相关内容