linux问题,这道题怎么写?
s=123456echo${s:1:${#s}}执行上述语句,控制台输出这个答案是什么?过程是什么?...
s=123456
echo ${s:1:${#s}}
执行上述语句,控制台输出
这个答案是什么?过程是什么? 展开
echo ${s:1:${#s}}
执行上述语句,控制台输出
这个答案是什么?过程是什么? 展开
1个回答
展开全部
题主你好,
${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是会报错的.
希望可以帮到题主, 欢迎追问
${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是会报错的.
希望可以帮到题主, 欢迎追问
追问
谢谢谢谢,很详细!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询