Вместо того, чтобы передавать строки поиска в качестве первого аргумента, передайте его как переменную для аргумента 2 и выше. Переменное число аргументов должно быть последним независимо от языка программирования.
Строковые литералы пишутся в одинарных кавычках, чтобы эффективно избегать синтаксического анализа для потенциального синтаксиса расширений переменных / вложенных оболочек.
Добавляет двойные кавычки вокруг переменных.
Использует printf
вместо echo
при форматировании строк со смешанными литералами и переменными.
Использует параметр -F
с grep
для поиска простого текста чем интерпретировать строку поиска как регулярное выражение.
#!/usr/bin/env bash
#Function that checks if texts (vararg ARGV2) is in a document (ARGV1).
#Please make ARGV2 an array of strings, with each new line a new entry in the array.
declare -a inputText=('[test]' 'host=dynamic' 'disallow=all' 'allow=alaw' 'allow=ulaw' 'type=friend' 'context=test' 'secret=test')
function docCheckNReplace {
local document="$1"
# Shift out document from arguments array
# Now it only contains vararg search strings
shift
echo "$document"
for search_string; do
if grep -qF "$search_string" "$document"; then
echo 'found'
printf '%s was found in %s.\n' "$search_string" "$document"
else
echo 'not found'
echo "$search_string" >> "$document"
fi
done
}
docCheckNReplace '/home/kam/Documents/TextingSed.txt' "${inputText[@]}"