如果我有一个字符串数组并且我想在一个值中更改单个字符,我可以这样做:
$ array=(hello world)
$ array[2]=${array[2]:0:2}X${array[2]:3}
$ echo $array[2]
woXld
Run Code Online (Sandbox Code Playgroud)
即使此解决方案有效,它对于很长的字符串也很慢,因为它实际上在索引处重新分配了值,并且必须在更改字符之前和之后扩展原始值的两侧。
虽然可以处理数组中单个值的字符索引:
$ echo ${array[2][3]}
X
Run Code Online (Sandbox Code Playgroud)
并将新值分配给标量变量的字符索引:
$ string='hello world'
$ string[9]=X
$ echo $string
hello woXld
Run Code Online (Sandbox Code Playgroud)
类似的语法不适用于数组:
$ array[2][3]=X
zsh: no matches found: array[2][3]=X
Run Code Online (Sandbox Code Playgroud)
有没有办法比第一种方法更快地做我想做的事?