我编写了以下几行代码来获取字符串的最后一个字符:
str=$1
i=$((${#str}-1))
echo ${str:$i:1}它适用于abcd/
$ bash last_ch.sh abcd/
/It abcd*不适用于
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.shIt 列出当前文件夹中的文件。
发布于 2013-07-09 15:58:27
这就是为什么你需要引用变量的原因之一:
echo "${str:$i:1}"否则,bash展开变量,在本例中,在打印输出之前执行globbing。最好将参数引用到脚本中(如果您有匹配的文件名):
sh lash_ch.sh 'abcde*'另请参阅bash reference manual中的展开顺序。变量在文件名扩展之前进行扩展。
要获得最后一个字符,您应该只使用-1作为索引,因为负索引从字符串的末尾开始计数:
echo "${str: -1}"冒号(**:**)后的空格是必需的。
如果没有空间,这种方法是行不通的。
发布于 2014-02-08 03:02:59
Per @perreal,引用变量很重要,但因为我在评论中找到了解决手头问题的更简单的方法之前,我读了这篇文章5次……
str='abcd/'
echo "${str: -1}"输出:/
str='abcd*'
echo "${str: -1}"输出:*
感谢在上面参与的每一个人;我在整个帖子中适当地添加了+1!
发布于 2015-10-01 01:52:43
我知道这是一个非常古老的帖子,但没有人提到哪个对我来说是最干净的答案:
echo -n $str | tail -c 1请注意,-n只是为了使回显在末尾不包含换行符。
https://stackoverflow.com/questions/17542892
复制相似问题