Соответствующие двойные кавычки с регулярными выражениями [duplicate]

Преобразование файла параметров в переменные среды

Обычно я занимаюсь анализом вместо источника, чтобы избежать сложностей некоторых артефактов в моем файле. Он также предлагает мне способы специально обрабатывать цитаты и другие вещи. Моя главная цель - сохранить все, что приходит после «=», как литерала, даже двойных кавычек и пробелов.

  #! / Bin / bash function cntpars () {echo "& gt; Count  : $ # "echo" & gt; Pars: $ * "echo" & gt; par1: $ 1 "echo" & gt; par2: $ 2 ", если [[$ # = 1 & amp; & amp; & amp;  $ 1 = "значение content"]];  then echo "& gt; PASS" else echo "& gt; FAIL" return 1 fi} function readpars () {while read -r line;  do key = $ (echo "$ {line}" | sed -e 's / ^ \ ([^ =] * \) = \ (. * \) $ / \ 1 /') val = $ (echo "$  {line} "| sed -e 's / ^ \ ([^ =] * \) = \ (. * \) $ / \ 2 /' -e 's /" / \\ "/ g') eval"  $ {key} = \ "$ {val} \" "done & lt; & lt;  EOF var1 = "value content" var2 = value content EOF} # Вариант 1: Будет проходить эхо "eval \" cntpars \ $ var1 \ "" eval "cntpars $ var1" # Вариант 2: Будет ли сбой эха "cntpars \ $ var1"  cntpars $ var1 # Вариант 3: Будет ли сбой echo "cntpars \" \ $ var1 \ "" cntpars "$ var1" # Вариант 4: Будет ли проходить эхо "cntpars \" \ $ var2 \ "" cntpars "$ var2"  

Обратите внимание на небольшой трюк, который мне пришлось сделать, чтобы рассмотреть мой цитируемый текст как единственный параметр с пробелом для моей функции cntpars . Требуется один дополнительный уровень оценки. Если бы я не сделал этого, как в Варианте 2, я бы прошел 2 параметра следующим образом:

  • "значение
  • content "

Двойное цитирование во время выполнения команды заставляет сохранять двойные кавычки из файла параметров. Следовательно, третий вариант также терпит неудачу.

Другим вариантом было бы, конечно, просто не предоставлять переменные в двойных кавычках, как в Варианте 4, а затем просто убедиться, что вы укажете их при необходимости. [ ! d12]

Просто что-то, о чем нужно помнить.

Поиск в режиме реального времени

Еще одна вещь, которую мне нравится делать - это искать в режиме реального времени, избегая использования переменные среды:

  lookup () {если [[-z "$ 1"]];  затем echo "" else $ {AWK} -v "id = $ 1" 'BEGIN {FS = "="} $ 1 == id {print $ 2;  exit} '$ 2 fi} MY_LOCAL_VAR = $ (поиск CONFIG_VAR filename.cfg) echo "$ {MY_LOCAL_VAR}"  

Не самый эффективный, но с меньшими файлами работает очень чисто.

52
задан 17 revs, 12 users 32% 8 April 2014 в 21:11
поделиться