如何获取 bash 脚本中除最后一个字符之外的所有字符?

PIN*_*INK 1 macos bash shell

我有一个文本文件,其中包含该文件的文件名和标签

示例字符串:
0-3081031014094495-0.png 0

我正在使用此命令迭代文本文件并获取最后一个字符。

while IFS= read -r line; do
    echo $line | tail -c 2
done <$PWD/$i/caffe/test.txt
Run Code Online (Sandbox Code Playgroud)

我还想获得最后一个字符之前的所有内容。我将echo $line | head -c -2其解释为: 从头开始并获取所有内容,直到最后两个字符

编辑:

感谢您提供这么多非常快速的答案。我在原来的问题中没有提到的是我正在使用 Mac。我认为这并不重要,但尝试了你的一些答案后我意识到这很重要。

例如,Mac 上不支持使用负子字符串。詹姆斯·布朗的解决方案是第一个对我有用的解决方案,所以这就是我接受他的答案的原因。

Jam*_*own 5

获取 bash 中最后一个字符之前的所有内容

$ foo="0-3081031014094495-0.png 0" 
$ echo ${foo%?}
0-3081031014094495-0.png
Run Code Online (Sandbox Code Playgroud)

来自http://tldp.org/LDP/abs/html/string-manipulation.html

${字符串%子字符串}

从$string后面删除$substring的最短匹配。