变量处理
子串: 字符串子串, 数组子串; 类似${parameter}[offset:length]即求值后处理数组; 字符数组或字符串数组;
${parameter:offset}
${parameter:offset:length}
- 格式一:
parameter[offset:] - 格式二:
length<0 ? parameter[offset:length] : paramter[offset:offset+length] - 注:
offset,length可以为正负数; 正数offset下标,length长度; 负数offset下标,length下标;
offset,length会当成算数表达式进行处理; offset为负数建议空格, :- 则会被错误解析;
下标从0开始; length下标则为半开区间[);
字符串子串案例
普通字符串
aaa=bbb0123456789bbb
echo ${aaa:3:10}
echo ${aaa:3:-3}
echo ${aaa: -13:10}
echo ${aaa: -13:-3}
# 0123456789
# 0123456789
# 0123456789
# 0123456789
选项参数字符串
set -- bbb0123456789bbb
echo ${1:3:10}
echo ${1:3:-3}
echo ${1: -13:10}
echo ${1: -13:-3}
# 0123456789
# 0123456789
# 0123456789
# 0123456789
字符串数组
array[0]=bbb0123456789bbb
echo ${array[0]:3:10}
echo ${array[0]:3:-3}
echo ${array[0]: -13:10}
echo ${array[0]: -13:-3}
# 0123456789
# 0123456789
# 0123456789
# 0123456789
@处理入参数组和自定义数组
其他和普通变量相同, 除了length不能为负数;否则报错
入参数组
set -- b b 0 1 2 3 4 5 6 7 8 9 b b b
echo ${@:0}
echo ${@:3:10}
echo ${@:3:-3}
echo ${@: -13:10}
echo ${@: -13:-3}
# ./test.sh b b 0 1 2 3 4 5 6 7 8 9 b b b
# 0 1 2 3 4 5 6 7 8 9
# ./test.sh: line 4: -3: substring expression < 0
# 0 1 2 3 4 5 6 7 8 9
# ./test.sh: line 6: -3: substring expression < 0
自定义数组
array=(b b b 0 1 2 3 4 5 6 7 8 9 b b b)
echo ${array[@]:0}
echo ${array[@]:3:10}
echo ${array[@]:3:-3}
echo ${array[@]: -13:10}
echo ${array[@]: -13:-3}
# b b b 0 1 2 3 4 5 6 7 8 9 b b b
# 0 1 2 3 4 5 6 7 8 9
# ./test.sh: line 4: -3: substring expression < 0
# 0 1 2 3 4 5 6 7 8 9
# ./test.sh: line 6: -3: substring expression < 0
不能作用于图, 得到的结果不确定, 可能不同机器或不同版本的shell结果不一样;
该博客主要介绍了Bash中变量的子串处理,包括字符串子串和数组子串。提到子串处理会当成算数表达式,负数使用时建议加空格,下标从0开始且为半开区间。还给出了字符串子串案例,以及入参数组和自定义数组的处理情况。
406

被折叠的 条评论
为什么被折叠?



