#!/bin/sh
declare -a LIST= ('a' 'b' 'c' )
не работает в Ubuntu, для которого /bin/sh
является мягкой ссылкой на /bin/dash
Как я могу объявить список, который будет поддерживаться на всех видах оболочки?
#!/bin/sh
declare -a LIST= ('a' 'b' 'c' )
не работает в Ubuntu, для которого /bin/sh
является мягкой ссылкой на /bin/dash
Как я могу объявить список, который будет поддерживаться на всех видах оболочки?
Короткий ответ: ты не можешь. Вот почему первая строка (которая должна иметь начальный #
, который появился бы, если бы вы написали текст в виде кода) позволяет указать оболочку, к которой он относится. В частности, 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 имеется много информации о совместимости с подробным списком различий.