Supprimer un mot spécifique dans la variable

Dans un script bash , comment puis-je supprimer un mot d'une string, le mot serait stocké dans une variable.

 FOO="CATS DOGS FISH MICE" WORDTOREMOVE="MICE" 

Essayer:

 $ printf '%s\n' "${FOO//$WORDTOREMOVE/}" CATS DOGS FISH 

Cela fonctionne aussi dans ksh93 , mksh , zsh .


POSIXLY:

 FOO="CATS DOGS FISH MICE" WORDTOREMOVE="MICE" remove_word() ( set -f IFS=' ' s=$1 w=$2 set -- $1 for arg do shift [ "$arg" = "$w" ] && continue set -- "$@" "$arg" done printf '%s\n' "$*" ) remove_word "$FOO" "$WORDTOREMOVE" 

Il suppose que vos mots sont délimités par des espaces et a des effets secondaires qui suppriment les espaces avant et après "$WORDTOREMOVE" .

Utilisation du rlocation de la sous-string bash:

FOO = $ {FOO // $ WORDTOREMOVE /}

Le // remplace toutes les occurrences de la sous-string ($ WORDTOREMOVE) par le contenu entre / et}. Dans ce cas rien.

Pour plus d'informations sur cette méthode et d'autres façons de travailler avec les strings dans bash, reportez-vous à la section 10.1. Manipulation des strings du guide avancé Bash-Scripting .