Shell ksh和bash的数组

Shell ksh和bash的数组,shell,hp-ux,Shell,Hp Ux,我正在编写一个脚本,可以在bash和ksh中使用。我有以下代码 if [ -e /bin/ksh ]; then set -A arrayexample a b c else arrayexample=('a' 'b' 'c') fi 在ksh中运行时,出现以下错误消息: 第4行出现语法错误:(”不应为“”` 尝试使用以下命令执行脚本: bash script.sh 或 我怀疑您的脚本是由默认shell执行的,在HP-UX中是(我相信)POSIX shell不支持

我正在编写一个脚本,可以在bash和ksh中使用。我有以下代码

if [ -e /bin/ksh ]; then
       set -A arrayexample a b c
else
       arrayexample=('a' 'b' 'c')
fi
在ksh中运行时,出现以下错误消息:

第4行出现语法错误:(”不应为“”`


尝试使用以下命令执行脚本:

bash script.sh


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

正如其他人所指出的,最好测试当前shell是否为ksh,而不是某个文件是否碰巧存在。然后,尽管您的else子句可能不会在ksh上执行,但ksh会在执行相应部分之前解析整个复合语句。PD ksh v5.2.14抱怨“ksh:语法错误:`(“unexpected”在解析else子句时,而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

您正在运行哪个版本的bash?
arrayexample=('a''b''c')
应该可以在
ksh
bash
中使用。您看到的错误似乎不是来自两个shell,而是来自一个不支持数组的shell。@DougeResh版本4.2.20应该可以与该版本一起使用。从标记中可以看出,您是否在hp ux中运行此脚本?您如何调用此脚本?另外,我想使用$shell或$KSH_VERSION或$BASH_VERSION变量来确定您正在运行的shell。
-e/bin/KSH
仅表示文件存在并且是可执行的,但并不意味着您正在运行/bin/kshI。您过去读过关于KSH和HP-UX的问题。是否
echo${.sh.VERSION}
返回一些信息,或者只是一个错误消息?如果错误消息和无versoin信息,那么您使用的是ksh88,您必须搜索以查找您的服务器上是否安装了ksh93+。祝您好运。错误发生在korn shell上,而它首先不应该读取else中的代码。您
如果
只检查
/bin/ksh。您确定正在使用
ksh
运行脚本吗?是的,当我尝试使用ksh script.sh运行脚本时,我遇到了相同的错误。当我在满足条件-e/bin/ksh的HP-UX中运行脚本时,会发生错误。您使用的
ksh
的哪个版本?是
哪个版本ksh
output
/bin/ksh
?哪个ksh输出/bin/ksh,但我不知道ksh的版本
# 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