Чтение файла свойств в сценарии оболочки, содержащего символ "=" - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть два файла param.properties и readParam.sh, которые считывают значения параметров из файла param.properties

param.properties:

val1=a
val2=b=c;c=d

readParam.sh:

PROPERTY_FILE=p.properties

function getProperty {
   PROP_KEY=$1
   PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`
   echo $PROP_VALUE
}
val1=$(getProperty "val1")
echo val1 : $val1
val2=$(getProperty "val2")
echo val2 : $val2

Когда я запускаю скрипт readParam.sh, я получаю вывод в виде:

val1: a

val2: b

Где val2 дает только половину значения (этодает только «b» вместо «b = c; c = d»)

Пожалуйста, помогите мне с тем же

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018
PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`

-f2 даст вам только второй параметр из строки, которую вы режете, на основе разделителя.

, так как "=" присутствует в нескольких местах в одной строке, он разделитстрока в несколько частей, и когда вы попытаетесь получить результат, используя f2, вы получите только вторую часть.

, поэтому используйте для получения остальных значений строку после первого появления разделителя.

PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2-`
0 голосов
/ 21 ноября 2018

просто расширите свои существующие коды:

измените

cut -d'=' -f2

на:

cut -d'=' -f2-

Однако я бы изменил вашу cat|grep|cut цепочку в одну awk однулайнер:

function getProperty {
    awk -F'=' -v k="$1" '$1==k&&sub(/^[^=]*=/,"")' $PROPERTY_FILE
}
...