Bash 提取传递要剪切的变量的子字符串
是否可以在Bash 提取传递要剪切的变量的子字符串,bash,unix,Bash,Unix,是否可以在bash中使用cut执行类似操作: strLf="JJT9879YGTT" strZ=(2, 3, 5, 6, 9, 11) numZ=${#strZ[@]} for ((ctZ=0; ctZ<${numZ}; ctZ++)) do lenThis=${strZ[${ctZ}]} fetch=$(echo "${strLf}" | cut -c 1-${lenThis}) done strLf=“JJT9879YGTT” strZ=(2,3,5,6,9,11) nu
bash
中使用cut
执行类似操作:
strLf="JJT9879YGTT"
strZ=(2, 3, 5, 6, 9, 11)
numZ=${#strZ[@]}
for ((ctZ=0; ctZ<${numZ}; ctZ++))
do
lenThis=${strZ[${ctZ}]}
fetch=$(echo "${strLf}" | cut -c 1-${lenThis})
done
strLf=“JJT9879YGTT”
strZ=(2,3,5,6,9,11)
numZ=${#strZ[@]}
对于((ctZ=0;ctZ您可以使用${string:position:length}
获取$string
的长度
字符,从位置开始
$ s="JJT9879YGTT"
$ echo ${s:0:2}
JJ
$ echo ${s:0:3}
JJT
并使用变量:
$ t=5
$ echo ${s:0:$t}
JJT98
因此,如果将所有这些值放在一个数组中,可以循环遍历它们,并将其值用作表示${string:0:length}
的参数:
strLf="JJT9879YGTT"
strZ=(2 3 5 6 9 11)
for i in ${strZ[@]}; do
echo "${strLf:0:$i}"
done
对于给定字符串,它会将以下内容返回给我:
$ for i in ${strZ[@]}; do echo "${strLf:0:$i}"; done
JJ
JJT
JJT98
JJT987
JJT9879YG
JJT9879YGTT
输出:
JJ
JJT
JJT98
JJT987
JJT9879YG
JJT9879YGTT
意识到我的错误-我在数组中使用逗号来标识元素
因此,与我使用的不同:
strZ=(2, 3, 5, 6, 9, 11)
我必须使用:
strZ=(2 3 5 6 9 11)
它也适用于cut
。您应该将第三个示例中的数组名称更改为strZ
strZ=(2 3 5 6 9 11)