我试图从bash数组中删除任何一个关键字的第一个外观.
ARRAY=(foo bar and any number of keywords) keywords=(red,rednet,rd3.0)
我删除了这样的关键字:ARRAY =(${ARRAY [@] /“$keyword”/})然后如果“red’是第一个找到的关键字,它将从两个关键字中删除’red’并返回”foo bar net “而不是”foo bar rednet“.
编辑:这是一个例子,希望这使它更清晰.
for keyword in ${ARRAY[@]}; do if [ "$keyword" = "red" ] || [ "$keyword" = "rd3.0" ] || [ "$keyword" = "rednet" ]; then # HERE IS TROUBLE ARRAY=( ${ARRAY[@]/"$keyword"/} ) echo "ARRAY is now ${ARRAY[@]}" break fi done
如果ARRAY =(red rednet rd3.0)返回net rd3.0而不是rednet rd3.0
如果我使用unset,:unset ${ARRAY [“$keyword”]} bash抱怨如果rd3.0在数组中::语法错误:无效算术运算符(错误标记为“.0”)
从阵列中取消设置或删除完全匹配的安全方法是什么?
解决方法
使用带有索引处数组值的unset命令,如下所示:
#!/usr/bin/env bash ARRAY=(foo bar any red alpha number of keywords rd3.0 and) keywords=(red,rd3.0) index=0 for keyword in ${ARRAY[@]}; do if [ "$keyword" = "red" ] || [ "$keyword" = "rd3.0" ] || [ "$keyword" = "rednet" ]; then # HERE IS TROUBLE # ARRAY=( ${ARRAY[@]/"$p"/} ) unset ARRAY[$index] echo "ARRAY is now: ${ARRAY[@]}" break fi let index++ done