sh与bash中的export语法的区别

    这个问题是在Solaris 10上运行公司的一个产品的时候发现的.这个shell的目的是设置JRE_HOME环境变量,并用$JRE_HOME/bin/java去调用执行一个jar包.但是我在Solaris下运行了这个.sh文件后,控制台每次都报错JRE_HOME *** :不是唯一标识符,搞的人很郁闷.这个产品的开发问了下,据说是没碰到过这个问题,而且先前也在linux上测试过,也没碰到问题.难道是Solaris下的shell解释器版本问题?
    后面在网上查了下,有解决方案,即把export 变量=变量值分开两行写,如下面的例子.
$ export JAVA_HOME=/usr/jdk/jdk1.6.0_14
JAVA_HOME=/usr/jdk/jdk1.6.0_14: 不是一标识符

$ JAVA_HOME=/usr/jdk/jdk1.6.0_14
$ export JAVA_HOME

-bash-3.00$ export JAVA_HOME=/usr/jdk/jdk1.6.0_14
-bash-3.00$

    期间,我还专门比对了下Bourne shell(sh)和Bourne again shell(bash)的区别,可以看到sh和bash对export有不同的语法要求.
    可以看到,bash是允许export和变量赋值放在同一行的,sh是不允许的.然后翻书,查看shell圣经(classic shell scripting),发现在第6章讲变量时候有这么一句话:"最初的Bourne Shell会要求你使用一个两步骤的进程:也就是,将赋值和导出(export)或者只读(readonly)的操作分开(如前所示).POSIX标准允许你将复制与命令的操作结合在一起",呃,也就是说,我在Solaris 10上使用的默认shell实际上遵循的是老的标准.话说这个启动程序使用的#!后面的shell解释器以及我系统默认shell 解释器都是/usr/bin/sh,看样子,以后要注意这个问题了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值