В скрипте у меня есть функция, которая оценивает переданные параметры «ключ = значение», то есть:
function evaluateKeyValuePair() {
eval "$1"
}
evaluateKeyValuePair "key=value with whitespaces"
evaluateKeyValuePair "key=value"
Последний вызов работает нормально, «echo $key» печатает «значение». Однако вызов функции с пробелами в «значении» не работает: для «с» и «пробелов» выдается ошибка «команда не найдена».
Я уже читал, что использование eval вообще плохая идея. Но, к сожалению, я не могу изменить базовое расположение функций. Я просто должен жить с этим.
Я попытался изменить его на:
function evaluateKeyValuePair() {
key="${1%%=*}"
val2="${1#*"="}"
eval $key="$val2"
}
но это тоже не работает.
Есть ли способ оценить значения пары ключей с пробелами в «значении» или мне нужно проверить наличие пробелов в переданном параметре и вернуть ошибку, если они есть?
СПАСИБО заранее!
bash
уже имеет способ передачи значений таким образом:key="value with whitespace" ./script
сделаетkey
доступным внутриscript
. Неясно, каков ваш фактический вариант использования, но это почти наверняка неправильное решение. - person chepner   schedule 22.11.2015source
файл вместо того, чтобы пытаться обработать его самостоятельно? - person Eric Renouf   schedule 22.11.2015