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)