正确地将“test”从POSIX sh转换为旧的普通bourne shell

时间:2016-05-18 16:57:04

标签: shell unix sh

在只有普通bourne shell的旧Solaris上,我无法正确翻译一个简单的测试,例如:

[ -d '/export/home/mydir' -o ! -e '/export/home/mydir' -a -d $(dirname '/export/home/mydir') ]

...现代POSIX shell支持,例如ash,bash,ksh,&c;

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

使用便携式shell脚本,请尝试避免对-a-o使用andor。此外,正如其他人所评论的那样,$()扩展可能无法实现,但反叛将会出现。

请改为尝试:

if [ -d '/export/home/mydir' ] || [ ! -e '/export/home/mydir' ] && [ -d `dirname '/export/home/mydir'` ]; then

如果[不可用,您可能需要使用test代替[并删除结束]

供参考,以下是writing portable shell scripts的指南。