我正在尝试构建一个函数:
排除文件是一个文本文件,其中包含要用行分隔的要排除的字符串列表。
例如:
排除文件为:list.txt
。
它包含:
值1
值2
假设我们用这些参数调用函数:
Function value1 value2 value3
所需的输出是:
值3
到目前为止,我试图遍历list.txt
并用数组覆盖数组,减去文件中的String。但似乎它不会覆盖数组,而是附加值。
我现在得到的输出是:
value3 value2 value3
我的代码是:
function Function {
argsArr=( "$@" )
while read p; do
argsArr="${argsArr[@]//$p*/}"
done <list.txt
echo "${argsArr[@]}"
}
答案 0 :(得分:2)
一个简单的grep检查就足够了:
$ cat list.txt
value1
value2
$ function Function
> {
> for i in "$@"
> do
> fgrep -q "$i" list.txt || echo "$i"
> done
> }
$ Function value1 value2 value3
value3
$
我们只是在list.txt
(排除文件)中迭代传递给function和grep的参数,如果退出代码不为0,即不存在,那么我们只需将其打印出来。
如果你想把结果放在数组中,使用array=()
在函数的开头声明它,只需将参数附加到这样的数组:fgrep -q "$i" list.txt || array+=("$i")
并在函数的末尾只做{{1 }}
编辑1:只使用数组
echo ${array[@]}
答案 1 :(得分:1)
查看第4行:
function Function {
argsArr=( "$@" )
while read p; do
argsArr=(${argsArr[@]/$p*/})
done <list.txt
echo "${argsArr[@]}"
}