我正在尝试构建一个函数:
- 获取参数并将它们分配给一个数组。
- 删除所有匹配排除文件的元素。
排除文件是一个文本文件,其中包含要排除的以行分隔的字符串列表。
例如:
排除文件是:list.txt
。
它包含:
value1
value2
假设我们使用这些参数调用函数:
Function value1 value2 value3
期望的输出是:
value3
到目前为止,我尝试遍历 list.txt
并用数组减去文件中的字符串覆盖数组。但它似乎并没有覆盖数组,而是附加了值。
我现在得到的输出是:
value3 value2 value3
我的代码是:
function Function {
argsArr=( "$@" )
while read p; do
argsArr="${argsArr[@]//$p*/}"
done <list.txt
echo "${argsArr[@]}"
}
最佳答案
一个简单的 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
(排除文件)(排除文件)中为该参数进行 grep,如果退出代码为非 0,即不存在,则我们将其打印出来。
如果您想要数组中的结果,请在函数开始时使用 array=()
声明它,只需将参数附加到数组中,如下所示:fgrep -q "$i"列表.txt || array+=("$i")
并在函数末尾执行 echo ${array[@]}
编辑 1:仅使用数组
$ function Function
> {
> declare -a array=()
> for i in "$@"
> do
> fgrep -q "$i" list.txt || array+=("$i")
> done
> echo "${array[@]}"
> }
$ Function value1 value2 value3
value3
$
关于linux - 从文件中匹配模式的数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032037/