• 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。

     
  • 相关阅读:
    浏览器允许跨域运行字符串
    检查失败,<master>分支有过其他更新,请先在本地合并<master>分支的代码
    微信公众号开发点点滴滴
    手机上的软件开发应该
    见过写过最好的代码
    Prometheus之新版node_exporter监控主机设置
    Granfana设置邮件告警
    linux 中添加自己的库路径的方法 cannot open shared object file: No such file or directory
    C# this.Invoke()的作用与用法
    C#中this.Invoke()中委托的定义
  • 原文地址:https://www.cnblogs.com/fenglongyu/p/7450781.html
Copyright © 2020-2023  润新知