LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1025|回复: 5

[问题]Bash不同版本的语法差异问题

[复制链接]
发表于 2006-9-21 16:59:39 | 显示全部楼层 |阅读模式
本人做嵌入式开发,原来的工作环境是用Redhat9,后来因为自已用习惯了Ubuntu,于是想转移到Ubuntu下面工作。
像编译环境之类的安装就基本没问题,但是在Shell处好像有点麻烦。

原来的代码在Redhat9下是可以正常编译的,但在同样是使用Bash的Ubuntu下面却发现脚本有问题,比如其中有一段:
在编译过程中提示:

#( . /home/abc/linux/linux/.config ; \
if [ "${CONFIG_MODULES}" = "y" ] ; then \
make -C /home/abc/linux/linux modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=/home/abc/router/mipsel-uclibc/target ; \
fi )
/bin/sh: -c: line 3: syntax error near unexpected token `)'
/bin/sh: -c: line 3: `fi )'
make: *** [install] 错误 2



如上,提示这段脚本有语法错误,我看了一下 /bin/sh 是链接到/bin/bash

但是在Redhat9下用的也是Bash啊,难道会是因为Ubuntu的版本比较高?

麻烦各位帮我看一下上面一段脚本是不是有问题?

抑或不是脚本的或者Shell的问题而是其它的地方?
发表于 2006-9-21 22:36:38 | 显示全部楼层
第一行注释了(最后fi后留下半拉)。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-22 11:09:47 | 显示全部楼层
哦,原来是这样

刚刚现学了一下shell基础,好像说一个反斜杠应该是能把一个长行分成几个短行,为了阅读的方便

如果这样的话,上面的语句不就只是一个长句了吗?注释也就把整句都给注释掉而不会留下半拉吧?

是不是说ubuntu的bash默认是不支持用反斜杠来分割长句的?如果是的话,可以在哪里把这个选项打开呢?谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-22 11:53:40 | 显示全部楼层
在系统上试了一下:
  1. 编辑一个文件test.sh
  2. 内容是
  3. #!/bin/bash
  4. ec\
  5. ho abc\
  6. d
  7. 运行结果是abcd
复制代码

是不是能说明支持用反斜杠换行呢?唉。。。头大
回复 支持 反对

使用道具 举报

发表于 2006-9-22 12:48:02 | 显示全部楼层
根据最后的错误提示,因为你第一行使用#去注释掉了,然后产生的断行的错误,使fi)这个)没有找到(的匹配.
原有的代码段经过正确的断行后应该是如下
#( . /home/abc/linux/linux/.config ;
if [ "${CONFIG_MODULES}" = "y" ] ;
then make -C /home/abc/linux/linux modules_install DEPMOD=/bin/true INSTALL_MOD_PATH=/home/abc/router/mipsel-uclibc/target ;
fi )
回复 支持 反对

使用道具 举报

发表于 2006-9-22 14:02:58 | 显示全部楼层
Post by bluebirdyy
哦,原来是这样

刚刚现学了一下shell基础,好像说一个反斜杠应该是能把一个长行分成几个短行,为了阅读的方便

如果这样的话,上面的语句不就只是一个长句了吗?注释也就把整句都给注释掉而不会留下半拉吧?

是不是说ubuntu的bash默认是不支持用反斜杠来分割长句的?如果是的话,可以在哪里把这个选项打开呢?谢谢

第一行被注释掉了,那第一行后的"\"也就理所当然被注释掉了,所以就留下半拉了.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表