• shell执行${var:m:n}报错Bad substitution解决办法


    Ubuntu系统下,执行字符串截取脚本时,总是报错:Bad substitution,脚本非常简单如下:

    #!/bin/sh
    str1="hello world!"
    echo ${str1:1:4}

    执行后报错:

    .str1.sh4:./str1.sh:Bad substituion

    解决方法:

    将解释器调整为bash

    #!/bin/bash
    $sudo ./str1.sh
    ello

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

       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。

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    Rng(求逆元)
    P1306 斐波那契公约数(ksm+结论)
    sort(桶排序+hash)
    牛客多校训练AFJ(签到)
    Educational Codeforces Round 68 (Rated for Div. 2)-D. 1-2-K Game
    Educational Codeforces Round 68 (Rated for Div. 2)-C-From S To T
    The Unique MST(最小生成树的唯一性判断)
    飞跃原野(三维bfs)
  • 原文地址:https://www.cnblogs.com/itcircle/p/12724437.html
Copyright © 2020-2023  润新知