Попробуйте:
while IFS== read -r var value
do
value="${value#\"}"
[ "$var" ] && declare "$var=${value%\"}"
done <myconf
echo "$cli"
Это даст результат:
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
а IFS == чтение -r значение переменной; do
Это запускает цикл. Он временно устанавливает разделитель полей, IFS
, на знак равенства, =
. Затем он считывает строку и разделяет ее на две переменные var
и value
. var
присваивается тому, что находится до первого =
, а значение
получает все, что находится после первого =
.
value = "$ {value # \"} "
Удаляет начальный "
из значения.
["$ var"] && объявить "$ var = $ {value% \"} "
Если var
не является пустым, другими словами, если мы не читали пустую строку, присвойте переменной $ var
значение $ {value% \ "}"
, где $ {value% \ "}"
удаляет завершающее "
из $ value
.
done
Это сигнализирует об окончании цикла и устанавливает ввод цикла из файла myconf
.
Это источник файла myconf
:
. myconf
echo "$cli"
Это дает результат:
/opt/Solartis_Monitoring/JON_CLI/bin/rhq-cli.sh
Поскольку этот подход выполняет файл myconf
, он требует, чтобы вы доверяйте тому, кто создал myconf
. Если файл myconf
содержит какие-либо символы, активные в оболочке, результаты могут быть не такими, как вы хотите.