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

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

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

收到:

    v="ksdjfksjkjsdf"
    v2=${v::-6}

得到这个:

-bash: -6: substring expression < 0

答案1

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

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

答案2

您确定正在使用正确的 bash 版本运行脚本吗?你的shebang线路还好吗?如何调用脚本bash myscript.sh?

答案3

这有效:

v="aksdjfkajsdkfjakdf"
length=${#v}
v2=${v:0: length - 6}

答案4

我已经通过以下方法完成了

v="ksdjfksjkjsdf"
echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"

输出

 echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"

ksdjfks

相关内容