变量处理
子串: 字符串子串, 数组子串; 类似${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
结果不一样;