我正在尝试这样做,实现此目标的最强大方法是什么?
#!/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/