#!/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,并附有详细的差异列表。