这个问题是在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,看样子,以后要注意这个问题了.

分类: Shell_Learning
本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/04/27/2030937.html,如需转载请自行联系原作者

sh与bash中的export语法的区别相关推荐

  1. bash中的export命令

    export命令 作用: 将父shell中的变量生效到所有子shell中都生效.比如在父shell中修改了LANG=utf8,export以后子shell中也会使用该语言编码. 使用语法: expor ...

  2. Linux ubuntu终端sh、bash、shell的联系与区别

    终端是一个在窗口中绘制文本的程序,它会在屏幕上显示输出,也能让你通过键盘输入内容.准确讲,应该被称为「终端模拟器」,是对早年老式终端机的一种模拟程序.终端本身并不知道如何处理你的输入内容,它只是把你输 ...

  3. linux基础:shell中的sh与bash区别与常用命令

    目录 一,什么是sh和bash? 二,shell的基本用法 2.1,变量 2.2,算术运算 2.3,使用 bash 计算器在shell脚本中进行浮点运算 2.4,shell中的条件判断命令test和[ ...

  4. Linux中srch出现bash,ultraedit中shell脚本语法着色

    ultraedit中shell脚本语法着色 点击菜单"高级"-"配置",打开配置对话框.在导航一栏,点击"编辑器显示"----"语 ...

  5. 关于bash中if语法结构的广泛误解(转)

    转自: http://blog.chinaunix.net/u/8681/showart.php?id=1145851 我打赌正在看这篇文章的你, 超过99%的可能性你对这个问题的理解是错的. 或者至 ...

  6. shell中source、sh、bash、./的区别

    一.sh和bash的区别 sh和bash基本是一样,在我的linux环境查看,它俩是一样的: [root@unis0612p02-165 run]# ls -al `which sh` lrwxrwx ...

  7. linux shell 三元运算符,语法 - Bash中的三元运算符(?:)

    语法 - Bash中的三元运算符(?:) 有没有办法做这样的事情 int a = (b == 5) ? c : d; 用Bash? 14个解决方案 346 votes ternary operator ...

  8. linux shell 三元运算符,关于语法:Bash中的三元运算符(?:)

    有什么办法可以做这种事吗 int a = (b == 5) ? c : d; 使用BASH? @荷兰语的答案表明,bash确实有类似于"三元运算符"的东西,但是在bash中,这被称 ...

  9. Bash中的管道输出和捕获退出状态

    我想执行Bash中长时间运行的命令,都捕获它的退出状态,并且发球它的输出. 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee而不是命令的退出状态. ...

  10. 如何在Bash中比较字符串

    如何将变量与字符串进行比较(如果匹配则执行某些操作)? #1楼 要将字符串与通配符进行比较,请使用 if [[ "$stringA" == *$stringB* ]]; then# ...

最新文章

  1. 《彩票假设》ICLR 2019 best paper 阅读笔记
  2. Oozie 出现 ClassNotFoundException 解决方法
  3. Java 编程的动态性 第1 部分: 类和类装入--转载
  4. Linux同步目录 保留文件修改时间和权限 rsync
  5. Python进阶_mysql(1)
  6. 喜大普奔,VS Code 开启远程开发新时代!
  7. vue实现5秒后自动隐藏_王者荣耀:玩家选中单妲己被5楼疯狂嘲讽,发出战绩后,秒变舔狗...
  8. java一个进程可以村多少个线程_一台 Java 服务器可以跑多少个线程?
  9. 普源示波器 电脑 连接 软件_乐高wedo2.0电脑软件安装及蓝牙连接方法
  10. FPGA 光纤传输IP核的使用
  11. 微信开放平台之第三方授权开发
  12. 华为云云原生之多云管理利器Karmada从0到1的实操【与云原生的故事】
  13. go IO操作-文件读
  14. 桌面计算机图标管理打不开怎么回事,电脑桌面计算机图标打不开怎么办
  15. Proxifier设置代理上网详细操作
  16. 不用 Spring Security 可否?试试这个小而美的安全框架
  17. JavaScript 代码格式化及编写工具
  18. Node.js怎么配置 ?
  19. 苹果一项“杀手锏”过审,“智能穿戴+大健康”领域风云再起
  20. FICO配置详解之五:内部订单管理

热门文章

  1. Python json.dumps() 自动缩进
  2. ping和telnet
  3. 使用JSONP实现跨域通信
  4. 几种程序的反汇编代码入口特征
  5. ASP.Net下绑定TextBox回车事件的解决方法
  6. Scrapy 中的 Request 对象和 Respionse 对象
  7. Python第3次作业
  8. Remove Untagged Images From Docker
  9. 国外稳定的免费PHP空间byethost.com
  10. STM32F4XX高效驱动篇2 I2C