#!/bin/sh
declare -a LIST= ('a' 'b' 'c' )

не работает в Ubuntu, для которого /bin/sh является мягкой ссылкой на /bin/dash

Как я могу объявить список, который будет поддерживаться на всех видах оболочки?

1 ответ1

0

Короткий ответ: ты не можешь. Вот почему первая строка (которая должна иметь начальный # , который появился бы, если бы вы написали текст в виде кода) позволяет указать оболочку, к которой он относится. В частности, 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 имеется много информации о совместимости с подробным списком различий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .