我正在尝试这样做,实现此目标的最强大方法是什么?

#!/bin/bash

# Remove DOGS from CATSNDOGS to give CATS

DOGS="fido rover oscar bowwow spike max"

CATSNDOGS="bowwow figaro pussy oscar boots rover kitty max spike meowser fluffles fido"

CATS="" #?? How do I do this?

最佳答案

comm 答案是创新的,但当然不是唯一的方法。您也可以完全在 bash 中执行此操作,而无需使用额外的工具。

#!/bin/bash

DOGS="fido rover oscar bowwow spike max"
CATSNDOGS="bowwow figaro pussy oscar boots rover kitty max spike meowser fluffles fido"

# make an associative array...
declare -A dogs_a
for dog in $DOGS; do
  dogs_a[$dog]=1;
done

CATS=""
# step through everything
for beast in $CATSNDOGS; do
  # if it's not a dog...
  if [ -z "${dogs_a[$beast]}" ]; then
    CATS="$CATS $beast"
  fi
done

echo $CATS

请注意,这也依赖于空格作为字段分隔符,您应该阅读有关在 bash 中编程时始终将变量括在引号中的信息。

关于string - Bash:从变量 B 中删除变量 A 中的一系列字符串?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9854876/

10-16 04:10