码迷,mamicode.com
首页 > 系统相关 > 详细

linux shell脚本执行错误:bad substitution

时间:2017-08-29 23:50:57      阅读:560      评论:0      收藏:0      [点我收藏+]

标签:并且   mint   连接   识别   pac   用户   指定   lsp   shell编程   

脚本test.sh内容:

#!/bin/bash

read pressKey
indexes=0
c=${pressKey:indexes:1}
使用调试方式执行:sh -x test.sh第3行总出现bad substitution提示信息。
百思不得其解: 
于是百度,查到一条有用信息,这与linux shell使用的是/bin/sh,还是/bin/bash有关系。我的脚本中指定使用的是/bin/bash shell,但是我在调试的时候使用的是sh shell,因此调试时导致错误提示信息。
解决方法:
使用bash -x test.sh进行调试,则成功。
 
以下是引用的链接内容:
http://hi.baidu.com/wwkblog/item/c974569b9ee031aecd80e5fe

在linuxmint上执行如下脚本总是出错:

1
2
3
#!bin/sh
a="abcdefghijklmn"
echo ${a:2:7}

然后运行sh 1.sh总是报出bad substitutation

后来改成

1
2
3
#!bin/bash
a="abcdefghijklmn"
echo ${a:2:7}

然后执行 bash 1.sh 没有问题。

原因是ubuntu的sh是连接指向dash的,而不是bash,自然在识别${a:2:7}总是出问题。

   Linux中的shell有多种类型,其中最常用的几种是Bourne   shell(sh)、C   shell(csh)和Korn   shell(ksh)。三种shell各有优缺点。Bourne   shell是UNIX最初使用的shell,并且在每种UNIX上都可以使用。Bourne   shell在shell编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux操作系统缺省的shell是Bourne   Again   shell,它是Bourne   shell的扩展,简称Bash,与Bourne   shell完全向后兼容,并且在Bourne   shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C   shell和Korn   shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

   GNU/Linux 操作系统中的 /bin/sh 是 bash(Bourne-Again Shell)的符号链接,但鉴于 bash 过于复杂,有人把 ash 从 NetBSD 移植到 Linux 并更名为 dash(Debian Almquist Shell),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。Ubuntu 号称自从他们在 6.10 版里这样做了以后,系统启动速度有了明显的提升。Debian 计划在下一个发行版(代号 lenny)中也将 dash 作为默认的 /bin/sh。

 

linux shell脚本执行错误:bad substitution

标签:并且   mint   连接   识别   pac   用户   指定   lsp   shell编程   

原文地址:http://www.cnblogs.com/fenglongyu/p/7450781.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!