0

I am writing a script to work both in bash and ksh. I have the following code

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

I have the following error message when I run it in ksh:

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

4

2 回答 2

2

正如其他人所指出的,最好通过测试环境变量来测试当前 shell 是否为 ksh。可执行文件的位置太容易更改。然后,尽管您的 else 子句可能不需要在 ksh 上执行,但它确实需要解析。PD KSH v5.2.14 在解析 else 子句时会抱怨“ksh: syntax error: `(' unexpected”,而 MIRBSD KSH R43 可以无错误地解析和执行该语法。

这是一个适用于任何版本的 ksh 和 bash 的函数,它使用 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
于 2016-09-03T00:04:41.330 回答
0

尝试执行脚本

bash script.sh

或者

ksh script.sh

我怀疑您的脚本是由默认 shell 执行的,在 HP-UX 中是(我相信)POSIX shell,它不支持数组。

于 2013-07-08T14:05:00.737 回答