Аргументы функции в оболочке не имеют имен, как в других языках, например C. Они обрабатываются специальными переменными, которые представляют список аргументов. Например, "$@"
относится ко всему списку аргументов. Таким образом, первый переданный аргумент называется $1
, $2
до последнего аргумента.
Также переменные в оболочке не интерполируются в одинарных кавычках. Вам нужно заключить их в двойные кавычки для расширения.
Сообщается о проблеме отсутствия терминатора из-за неправильного регулярного выражения PCRE, в котором отсутствует символ =
GetParam() {
[ -z "$1" ] && { printf 'arg empty\n' >&2; }
grep "${1}=" file | grep -oP "(?<=${1}=).*"
# ^^^^ missing = symbol
}
Посмотрите на использование grep
во входном файле напрямую, избегая бесполезного вызова cat
. Избегая нескольких grep
вызовов, вы можете просто использовать awk
для этого как
GetParam() {
[ -z "$1" ] && { printf 'arg empty\n' >&2; }
awk -F= -v var="$1" '$1 == var { print $2 }' file
}
С этими определениями теперь вы можете использовать функции как
fooval=$(GetParam FOO)
barval=$(GetParam BAR)