2013-07-08 3 views
0

Я пишу скрипт для работы как в bash, так и в ksh. У меня есть следующий кодМассивы для ksh и bash

if [ -e /bin/ksh ]; then 
     set -A arrayexample a b c 
else 
     arrayexample=('a' 'b' 'c') 
fi 

У меня есть следующее сообщение об ошибке, когда я запускаю его в KSH:

Syntax error at line 4: (' is not expected`

+0

Какую версию Баш вы используете – dougEfresh

+3

'arrayexample = ('а' 'б' 'с')' должен работать как '' ksh' и bash' The ошибка, которую вы видите, появляется из любой оболочки, но из оболочки, которая не поддерживает массивы. – chepner

+0

@dougEfresh version 4.2.20 – Mansuro

ответ

1

Как уже отмечалось, лучше проверить, является ли текущая оболочка ksh, а не существует ли какой-либо файл. Затем, хотя предложение else может не выполняться в ksh, ksh анализирует весь составной оператор перед выполнением соответствующих частей. PD КШ v5.2.14 жалуется «КШ: ошибка синтаксиса:` (»неожиданной» при разборе своего еще пункта, в то время как MIRBSD КШ R43 можно разобрать и выполнить этот синтаксис без ошибок

Вот функция, которая работает в КШ & Баше,. с помощью Eval, чтобы избежать проблем синтаксического анализа:?.

# example invocation: 
# A B [C D ...] 
# sets B[0]=C, B[1]=D, ... 
A()if [ "$KSH_VERSION" ] 
    then set -A $1 "${@:2}" 
    else eval $1='("${@:2}")' 
    fi 
0

Попробуйте выполнить скрипт с

bash script.sh 

или

ksh script.sh 

Я подозреваю, что ваш сценарий i s, выполняемый оболочкой по умолчанию, которая в HP-UX является (я считаю) оболочкой POSIX, которая не поддерживает массивы.

+0

Ошибка происходит с оболочкой korn, в то время как она не должна читать код в другом месте в первую очередь. – Mansuro

+0

Вы 'if' только проверяете, присутствует ли'/bin/ksh', если это оболочка, обрабатывающая данный сценарий. Вы уверены, что работаете с 'ksh'? – chepner

+0

Да, когда я пытаюсь запустить скрипт с помощью ksh script.sh, у меня такая же ошибка. Ошибка возникает, когда я запускаю ее в HP-UX, которая удовлетворяет условию -e/bin/ksh – Mansuro

Смежные вопросы