从一个数组中删除第二个元素。代码如下:
#!/bin/basharray1=(a b c d a b c d)unset array1[1]echo ${array1[*]}
输出结果:
a c d a b c d
根据元素删除
在有些情况下,我们想删除数组中指定元素,比如删除上述数组中的`b`。代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( ${array1[*]/b} ) #将*换成 @, 结果一致echo ${array1[*]}
结果如下:
a c d a c d
1 将${array1[*]/b} 换成"${array1[*]/b}"
为了更好的测试,加入一个循环,对移除b之后的数组进行循环输出。
代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( "${array1[*]/b}" )echo ${array1[*]}for value in ${array1[@]} #将@换成*,结果一致do echo $valuedone
结果如下:
a c d a c dacdacd
将上述代码中的for循环修改成 for value in "${array1[@]}"
代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( "${array1[*]/b}" )echo ${array1[*]}for value in "${array1[@]}" #将@换成*,结果一致do echo $valuedone
结果如下:
a c d a c da c d a c d
2 将${array1[*]/b} 换成 "${array1[@]/b}"
代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( "${array1[@]/b}" )echo ${array1[*]}for value in ${array1[@]} #将@换成*,结果一致do echo $valuedone
结果如下:
a c d a c dacdacd
将上述代码中的for循环修改成 for value in "${array1[@]}"
代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( "${array1[@]/b}" )echo ${array1[*]}for value in "${array1[@]}"do echo $valuedone
结果如下:
a c d a c dacdacd
将上述代码中的for循环修改成 for value in "${array1[*]}"
代码如下:
#!/bin/basharray1=(a b c d a b c d)array1=( "${array1[@]/b}" )echo ${array1[*]}for value in "${array1[*]}"do echo $valuedone
结果如下:
a c d a c da c d a c d
删除包含某个字符的元素
代码如下:
#!/bin/basharray1=(abc bcd cdf dfg)array1=( "${array1[@]/*b*}" )echo ${array1[*]}
结果如下:
cdf dfg
这个方案和上面的方案,本质上就是截取字符串。
* 和 @ 的区别
关于两者的区别,直接引用文档(https://www.gnu.org/software/bash/manual/html_node/Arrays.html) 会更加直接:
These subscripts differ only when the word appears within double-quotes. If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS variable, and ${name[@]} expands each element of name to a separate word.