Відповіді:
Спробуйте:
$ printf '%s\n' "${FOO//$WORDTOREMOVE/}"
CATS DOGS FISH
Це також працює в ksh93
, mksh
, zsh
.
ВІДКЛЮЧНО:
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"
Це передбачає, що ваші слова обмежені простором і мають побічний ефект, який видаляє пробіли до і після "$WORDTOREMOVE"
.
Використання bash заміни підрядків:
FOO = $ {FOO // $ WORDTOREMOVE /}
// замінює всі виникнення підрядків ($ WORDTOREMOVE) вмістом між / і}. У цьому випадку нічого.
Інформацію про цей та інші способи роботи з струнами в bash див. У розділі 10.1. Маніпулювання Рядок в Розширеному керівництві Bash-Scripting .