zoukankan      html  css  js  c++  java
  • linux shell脚本执行错误:bad substitution

    脚本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。

     
  • 相关阅读:
    EfCore基本用法
    C#笔试题目总结
    LINQ
    markdown 语法
    打造一款 刷Java 知识的小程序(二)
    为了考PMP,我做了一个刷题小程序
    30分钟全面解析-SQL事务+隔离级别+阻塞+死锁
    反制面试官 | 14张原理图 | 再也不怕被问 volatile!
    50+道大厂JVM面试题 + 11张思维导图就是让你懂JVM~
    【从零开始用Swift开发一个iOS应用(仿微博)】开篇-1. demo上手体验
  • 原文地址:https://www.cnblogs.com/fenglongyu/p/7450781.html
Copyright © 2011-2022 走看看