正在读取shell脚本中包含“的属性文件”=&引用;性格

正在读取shell脚本中包含“的属性文件”=&引用;性格,shell,properties-file,Shell,Properties File,我有两个文件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'=' -f

我有两个文件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”)


请帮我处理相同的

只需扩展您现有的代码:

改变

cut -d'=' -f2
进入:

但是,我会将您的
cat | grep | cut
链条更改为一个awk单衬套:

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

只需扩展现有代码:

改变

cut -d'=' -f2
进入:

但是,我会将您的
cat | grep | cut
链条更改为一个awk单衬套:

function getProperty {
    awk -F'=' -v k="$1" '$1==k&&sub(/^[^=]*=/,"")' $PROPERTY_FILE
}
-f2将仅给出根据分隔符剪切的字符串中的第二个参数

PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2-`
因为“=”出现在同一行的多个地方,所以它会将字符串分成多个部分,当您尝试使用f2检索输出时,它只会得到第二部分

因此,用于获取其余值的是第一次出现分隔符后的字符串

PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2-`
-f2将仅给出根据分隔符剪切的字符串中的第二个参数

PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2-`
因为“=”出现在同一行的多个地方,所以它会将字符串分成多个部分,当您尝试使用f2检索输出时,它只会得到第二部分

因此,用于获取其余值的是第一次出现分隔符后的字符串

PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2-`