删除变量中的特定单词

dan*_*anm 35 bash shell-script variable

bash脚本中,如何从字符串中删除单词,该单词将存储在变量中。

FOO="CATS DOGS FISH MICE"
WORDTOREMOVE="MICE"
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 41

尝试:

$ printf '%s\n' "${FOO//$WORDTOREMOVE/}"
CATS DOGS FISH
Run Code Online (Sandbox Code Playgroud)

这也适用于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"
Run Code Online (Sandbox Code Playgroud)

它假设您的单词是空格分隔的,并且具有删除 前后空格的副作用"$WORDTOREMOVE"


小智 38

使用bash子串替换:

FOO=${FOO//$WORDTOREMOVE/}
Run Code Online (Sandbox Code Playgroud)

//替换字符串(出现的所有$WORDTOREMOVE)与之间的内容/}。在这种情况下什么都没有。

有关在 bash 中使用字符串的这种方法和其他方法的信息,请参阅第10.1操作字符串中的高级Bash脚本编程指南


小智 6

echo $FOO | sed s/"$WORDTOREMOVE"//