Shell ksh和bash的数组
我正在编写一个脚本,可以在bash和ksh中使用。我有以下代码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不支持
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如果当前正在处理脚本,则不存在code>。您确定正在使用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