Ошибка при использовании массива в AIX: ошибка синтаксиса в строке 81: '(' неожиданно

Вы также можете увидеть этот вывод, если у вас есть Busybox . Alpine Linux — хороший пример популярного дистрибутива, который его использует. См.https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Простой способ узнать, используете ли вы Busybox, — запустить:

realpath `which less`

Или если вы используете рыбью скорлупу

realpath (which less)

Если на выходе /bin/busybox, вы можете решить проблему, установив gnu less .

На Альпах:

sudo apk --update add less

Команда будет отличаться в зависимости от вашего дистрибутива/менеджера пакетов.

0
16.11.2019, 20:26
2 ответа

Оболочка shобычно не понимает массивы, поскольку они не являются частью стандарта POSIX. Имя файла скрипта произвольное, поэтому суффикс имени файла .shили .kshничего не значит.

Кроме того, ваш синтаксис назначения массива немного неверен (слишком много пробелов ). Исправил, будет выглядеть

tableList=( Value1 Value2 Value3 )

Обратите внимание на отсутствие пробелов между концом имени переменной и (.

Чтобы иметь возможность запускать ваш сценарий, вам необходимо выполнить его с оболочкой, реализующей массивы, например ksh93, bash, zshили yash(, в зависимости от того, какие другие конструкции оболочки вы используете. ). Обратите внимание, что kshв AIX — это ksh88, который имеет несколько иной синтаксис для присвоения значений массивам (, который используетset -A tableList Value1 Value2 Value3).

Лучший способ запустить скрипт с помощью ksh93— это добавить строку#!-вверху скрипта, указывающую на интерпретатор ksh93, а затем сделать скрипт исполняемым с помощью chmod +x scriptname.

Чтобы использовать оболочку ksh93в AIX, самая первая строка сценария должна выглядеть так:

#!/usr/bin/ksh93

После этого не указывайте явный интерпретатор в командной строке при запуске скрипта:

./scriptname
3
28.01.2020, 02:22

AFAIR, AIX использует оболочку POSIX на основе ksh88 как /bin/sh

ksh88 не поддерживает

tableList=( Value1 Value2 Value3 )

и это не требуется POSIX.

0
28.01.2020, 02:22

Теги

Похожие вопросы