linux问题,这道题怎么写?

s=123456echo${s:1:${#s}}执行上述语句,控制台输出这个答案是什么?过程是什么?... s=123456

echo ${s:1:${#s}}

执行上述语句,控制台输出

这个答案是什么?过程是什么?
展开
 我来答
百度网友023b1c3
科技发烧友

2020-06-02 · 智能家居/数码/手机/智能家电产品都懂点
知道小有建树答主
回答量:1086
采纳率:84%
帮助的人:281万
展开全部
题主你好,
${s:1:${#s}}的执行过程是这样的:
a.先看里面的${#s},它算的是字符串s的长度, 因为s=123456,所以 ${#s}的结果是6,现在${s:1:${#s}}在变量替换后,变成了:
${s:1:6}
而${s:1:6}其实是一个字符串截取的表达式, 翻译过来就是:
"截取变量s中索引值为1到6的子串"
而索引的值一般是从0开始的, 也就是说123456从左到右每个字符对应的索引分别为012345:
1 2 3 4 5 6
0 1 2 3 4 5
所以1到6的子串就是:
23456
你可能会发现,1到6明明应该是6个数,但为何最后结果只有5个数, 因为字符串s最大的索引就是5,所以6没值,也就忽略了,对于shell这样写是没问题的, 也就是说你将索引值改为1000甚至10000,输入的值依然是23456,并且不会报错, 但有些语言如果索引值最大是5, 你整个1到6是会报错的.
希望可以帮到题主, 欢迎追问
追问
谢谢谢谢,很详细!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式