在只有普通bourne shell的旧Solaris上,我无法正确翻译一个简单的测试,例如:
[ -d '/export/home/mydir' -o ! -e '/export/home/mydir' -a -d $(dirname '/export/home/mydir') ]
...现代POSIX shell支持,例如ash,bash,ksh,&c;
有什么建议吗?
答案 0 :(得分:2)
使用便携式shell脚本,请尝试避免对-a
和-o
使用and
和or
。此外,正如其他人所评论的那样,$()
扩展可能无法实现,但反叛将会出现。
请改为尝试:
if [ -d '/export/home/mydir' ] || [ ! -e '/export/home/mydir' ] && [ -d `dirname '/export/home/mydir'` ]; then
如果[
不可用,您可能需要使用test
代替[
并删除结束]
。
供参考,以下是writing portable shell scripts的指南。