是否可以在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
通过连续循环,我希望${fetch}
根据"JJ" "JJT" "JJT98" "JJT987" "JJT9879YG" "JJT9879YGTT"
给出的索引包含strZ
等。
或者还有其他方法需要这样做吗?
答案 0 :(得分:2)
您可以使用${string:position:length}
从length
开始获取$string
position
个字符。
$ s="JJT9879YGTT"
$ echo ${s:0:2}
JJ
$ echo ${s:0:3}
JJT
还使用变量:
$ t=5
$ echo ${s:0:$t}
JJT98
因此,如果您将所有这些值放在一个数组中,您可以遍历它们并将其值用作length
参数${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
答案 1 :(得分:0)
words="JJT9879YGTT"
strZ=(2 3 5 6 9 11)
for i in "${strZ[@]}"
do
echo ${words:0:$i}
done
输出:
JJ
JJT
JJT98
JJT987
JJT9879YG
JJT9879YGTT
答案 2 :(得分:0)
意识到我的错误 - 我在数组中使用逗号来识别元素。
所以不是我用的东西:
strZ=(2, 3, 5, 6, 9, 11)
我必须使用:
strZ=(2 3 5 6 9 11)
它也适用于cut
。