无法从字符串中截取最后 X 个字母

Ste*_*ieD 0 bash

我使用的是 mac,bash 版本 5.0.2。

明白啦:

    v="ksdjfksjkjsdf"
    v2=${v::-6}
Run Code Online (Sandbox Code Playgroud)

得到这个:

-bash: -6: substring expression < 0
Run Code Online (Sandbox Code Playgroud)

ilk*_*chu 5

Bash 4.2 中添加了使用负长度

${PARAMETER:OFFSET:LENGTH}:负 LENGTH 值用作从字符串 4.2-alpha 末尾的偏移量

它似乎适用于 Bash 版本 4.2.53、4.4.12 和 5.0.3。使用其中任何一个,我得到:

$ s=123456; echo "${s::-2}"
1234
$ s=123456; echo "${s::-8}"
bash: -8: substring expression < 0
Run Code Online (Sandbox Code Playgroud)

也就是说,只要负长度的绝对值不大于字符串的长度,它就可以工作。