如何从字符串变量中提取最后 X 个字符?

如何从字符串变量中提取最后 X 个字符?

我正在将文件的最后一行读入变量。然后我想获取字符串变量的最后 X 个字符:

#!/bin/bash
someline="this is the last line content"
echo ${someline}
somepart=${someline: -5}
echo ${somepart}

运行:sh lastchars.sh

结果:

this is the last line content
line 4: Bad substitution

这可能出了什么问题?

答案1

听起来你根本没用。如果我使用而不是 ,bash我只能重现你显示的错误:dashbash

  1. bash

    $ line="someline content"
    $ echo ${line}
    someline content
    $ lastchars=${line: -5}
    $ echo ${lastchars}
    ntent
    
  2. dash

    $ line="someline content"
    echo ${line}
    lastchars=${line: -5}
    echo ${lastchars}
    $ someline content
    $ dash: 3: Bad substitution
    

你的舍邦线指向bash,但您使用运行脚本sh,因此shebang 被忽略。/bin/sh在 Ubuntu 系统上实际上是dash,一个不支持您尝试使用的语法的最小 shell。

当使用 shebang 行时,没有必要明确为脚本调用 shell,只需使其可执行(chmod a+x /path/to/script.sh)并运行它而不指定解释器:

/path/to/script.sh

或者,只需使用正确的一个:

bash /path/to/script.sh

答案2

显然,使用某个 shell 的内置函数很好,但是您也可以使用标准 UNIX 命令完成任务,因此它可以在任何 shell 中运行:

String="This is some text"
StrLen=`echo ${String} | wc -c`
From=`expr $StrLen - 5`
echo $String | cut -c${From}-${StrLen}

相关内容