Реализация, которая пытается заботиться о производительности и корректности, может выглядеть следующим образом:
#!/usr/bin/env bash
# ^^^^- NOT sh; sh does not support [[ ]] or <(...)
addWords() {
local tempFile dictFile
tempFile=$(mktemp dictFile.XXXXXX) || return
dictFile=$1; shift
[[ -e "$dictFile" ]] || touch "$dictFile" || return
sort -um "$dictFile" <(printf '%s\n' "$@" | sort -u) >"$tempFile"
mv -- "$tempFile" "$dictFile"
}
addWords myDict beta charlie delta alpha
addWords myDict charlie zulu
cat myDict
... имеет окончательное состояние словаря:
alpha
beta
charlie
delta
zulu
... ион перечитывает входной файл только один раз для каждого вызова addWords
(независимо от того, сколько слов добавляется!), а не один раз для добавления каждого слова.