Genaues Bash-Array-Element löschen?
Ich versuche zu entfernenNur der erste Auftritt eines beliebigen Schlüsselworts aus einem Bash-Array.
ARRAY=(foo bar and any number of keywords)
keywords=(red, rednet, rd3.0)
Ich entferne das Keyword wie folgt:ARRAY=( ${ARRAY[@]/"$keyword"/} )
Wenn "rot" das erste gefundene Schlüsselwort ist, wird es entfernt.rot'von beiden Schlüsselwörtern und geben "foo bar net" anstelle von "foo bar rednet" zurück.
Bearbeiten: Hier ist Beispiel, hoffentlich macht dies klarer.
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
Was, wenn derARRAY=(red rednet rd3.0)
kehrt zurücknet rd3.0 anstattrednet rd3.0
Wenn ich unset benutze:unset ${ARRAY["$keyword"]}
Bash beklagt sich, wenn die rd3.0 im Array ist::syntax error: invalid arithmetic operator (error token is ".0")
Was ist der sichere Weg, um nur eine exakte Übereinstimmung von einem Array zu entfernen?