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

分类:  Shell_Learning


本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/04/27/2030937.html,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Java Shell Linux
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
解决 centos下执行sh文件报错“/bin/bash^M: 坏的解释器:没有那个文件或目录” 问题
|
23天前
|
关系型数据库 MySQL iOS开发
干货文:Mac 中 .bash_profile 和 .zshrc 的区别
干货文:Mac 中 .bash_profile 和 .zshrc 的区别
22 1
|
10月前
|
Kubernetes Shell Linux
linux中sh/bash 进程为何不接受kill SIGTERM
在k8s的优雅终止中,如果容器的入口进程是sh 或者bash,需要注意你设定的gracefulterminate是无效的
108 0
|
11月前
|
Unix Shell Linux
Linux中sh与bash的区别(详细介绍)
Linux中sh与bash的区别(详细介绍)
333 0
|
12月前
|
Shell Linux 程序员
Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误
Shell-/bin/bash和/bin/sh解释器的误用引起的脚本语法错误
282 0
|
Ubuntu Shell Linux
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
采用 bash 或 sh+脚本的相对路径或绝对路径(不用赋予脚本+x 权限)、采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)、在脚本的路径前加上“.”或者 source(了解)原因: 前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则 子 shell 关闭,回到父 shell 中。第三种,也就是使用在脚本路径前加“.”或者 source 的方式,`可以使脚本内容在当前 shell 里执行,而无需打开子 shell!`这也是为什么我们每次要修改完
595 1
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
|
Shell
#!/bin/sh与#!/bin/bash有区别
#!/bin/sh与#!/bin/bash有区别
87 0
|
Ubuntu Shell Linux
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
Shell脚本的常用执行方式、bash 和 sh 的关系、子shell、Centos 默认的解析器是 bash、Linux 提供的 Shell 解析器、Shell 概述、Shell 脚本入门
|
IDE 安全 Shell
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别
514 0
Linux - #!/bin/bash 和 #!/usr/bin/env bash 的区别