如何在Bash中将数字拆分为字符数组并获取最后一位
如何在Bash中获取数字的最后一位数字
嘿,我明白你遇到的问题了——想用Bash循环获取变量i的最后一位数字,但之前尝试的字符数组方法没起作用对吧?先给你说清楚为什么${i[@]}没用:这个语法是用来遍历数组元素的,但你的i只是单个字符串/数字变量,所以它只会原样输出i的值,根本不会拆分字符。
下面给你两种简单可靠的方法,不管你的数字是几位都能搞定:
方法1:字符串截取(通用,适合数字/带字符的场景)
Bash支持直接对字符串进行截取操作,要取最后一位,可以用:
last_digit=${i: -1}
这里注意:后面的空格很重要!如果写成${i:-1},那就是给变量i设置默认值(如果i为空就返回1),完全不是我们要的效果。
如果你觉得空格容易忘,也可以用另一种写法,先获取字符串长度再减1:
last_digit=${i:${#i}-1}
${#i}会返回i的字符长度,比如i=123时长度是3,3-1=2,截取从索引2开始的字符(Bash字符串索引从0开始),也就是最后一位。
方法2:取模运算(仅适合纯数字场景)
如果你的i确定是纯数字,用数学取模更直接——任何数字对10取余,得到的就是最后一位:
last_digit=$((i % 10))
比如12 % 10 = 2,15 % 10 =5,完美符合你的需求。
完整示例代码
把这两种方法放到你的循环里试试:
#!/bin/bash for i in {10..15} do # 字符串截取法 str_last=${i: -1} # 取模法 mod_last=$((i % 10)) echo "当前数字:$i" echo "字符串截取得到最后一位:$str_last" echo "取模运算得到最后一位:$mod_last" echo "------------------------" done
运行后输出会是:
当前数字:10 字符串截取得到最后一位:0 取模运算得到最后一位:0 ------------------------ 当前数字:11 字符串截取得到最后一位:1 取模运算得到最后一位:1 ------------------------ ...(以此类推到15)
方法选择建议
- 如果
i可能包含非数字字符(比如i=num123),优先用字符串截取,确保拿到最后一个字符; - 如果
i是纯数字,取模运算更高效,逻辑也更清晰。
内容的提问来源于stack exchange,提问作者Lucia
相关产品推荐
相关产品推荐

