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,看样子,以后要注意这个问题了.
sh与bash中的export语法的区别相关推荐
- bash中的export命令
export命令 作用: 将父shell中的变量生效到所有子shell中都生效.比如在父shell中修改了LANG=utf8,export以后子shell中也会使用该语言编码. 使用语法: expor ...
- Linux ubuntu终端sh、bash、shell的联系与区别
终端是一个在窗口中绘制文本的程序,它会在屏幕上显示输出,也能让你通过键盘输入内容.准确讲,应该被称为「终端模拟器」,是对早年老式终端机的一种模拟程序.终端本身并不知道如何处理你的输入内容,它只是把你输 ...
- linux基础:shell中的sh与bash区别与常用命令
目录 一,什么是sh和bash? 二,shell的基本用法 2.1,变量 2.2,算术运算 2.3,使用 bash 计算器在shell脚本中进行浮点运算 2.4,shell中的条件判断命令test和[ ...
- Linux中srch出现bash,ultraedit中shell脚本语法着色
ultraedit中shell脚本语法着色 点击菜单"高级"-"配置",打开配置对话框.在导航一栏,点击"编辑器显示"----"语 ...
- 关于bash中if语法结构的广泛误解(转)
转自: http://blog.chinaunix.net/u/8681/showart.php?id=1145851 我打赌正在看这篇文章的你, 超过99%的可能性你对这个问题的理解是错的. 或者至 ...
- shell中source、sh、bash、./的区别
一.sh和bash的区别 sh和bash基本是一样,在我的linux环境查看,它俩是一样的: [root@unis0612p02-165 run]# ls -al `which sh` lrwxrwx ...
- linux shell 三元运算符,语法 - Bash中的三元运算符(?:)
语法 - Bash中的三元运算符(?:) 有没有办法做这样的事情 int a = (b == 5) ? c : d; 用Bash? 14个解决方案 346 votes ternary operator ...
- linux shell 三元运算符,关于语法:Bash中的三元运算符(?:)
有什么办法可以做这种事吗 int a = (b == 5) ? c : d; 使用BASH? @荷兰语的答案表明,bash确实有类似于"三元运算符"的东西,但是在bash中,这被称 ...
- Bash中的管道输出和捕获退出状态
我想执行Bash中长时间运行的命令,都捕获它的退出状态,并且发球它的输出. 所以我这样做: command | tee out.txt ST=$? 问题在于变量ST捕获了tee而不是命令的退出状态. ...
- 如何在Bash中比较字符串
如何将变量与字符串进行比较(如果匹配则执行某些操作)? #1楼 要将字符串与通配符进行比较,请使用 if [[ "$stringA" == *$stringB* ]]; then# ...
最新文章
- 《彩票假设》ICLR 2019 best paper 阅读笔记
- Oozie 出现 ClassNotFoundException 解决方法
- Java 编程的动态性 第1 部分: 类和类装入--转载
- Linux同步目录 保留文件修改时间和权限 rsync
- Python进阶_mysql(1)
- 喜大普奔,VS Code 开启远程开发新时代!
- vue实现5秒后自动隐藏_王者荣耀:玩家选中单妲己被5楼疯狂嘲讽,发出战绩后,秒变舔狗...
- java一个进程可以村多少个线程_一台 Java 服务器可以跑多少个线程?
- 普源示波器 电脑 连接 软件_乐高wedo2.0电脑软件安装及蓝牙连接方法
- FPGA 光纤传输IP核的使用
- 微信开放平台之第三方授权开发
- 华为云云原生之多云管理利器Karmada从0到1的实操【与云原生的故事】
- go IO操作-文件读
- 桌面计算机图标管理打不开怎么回事,电脑桌面计算机图标打不开怎么办
- Proxifier设置代理上网详细操作
- 不用 Spring Security 可否?试试这个小而美的安全框架
- JavaScript 代码格式化及编写工具
- Node.js怎么配置 ?
- 苹果一项“杀手锏”过审,“智能穿戴+大健康”领域风云再起
- FICO配置详解之五:内部订单管理