代码之家  ›  专栏  ›  技术社区  ›  Alex Bruce

为什么我的Shell字符串中的输出不正确?

  •  1
  • Alex Bruce  · 技术社区  · 7 年前

    脚本如下:

    a=`sed '/^project_folder=/!d;s/.*=//' conf.ini | tr -d '\r'`
    b=`sed '/^version.versionLicense=/!d;s/.*=//' conf.properties`
    
    path=${a}/${b}/env/123456/bin
    echo $path
    

    conf.ini的内容是 project_folder=/data/AUTO-PUBLISH/iPEMS_01

    conf.properties的内容是 version.versionLicense=3.1.0.3

    输出为 /env/123456/binISH/iPEMS_01/3.1.0.3

    我的预期输出是 /data/AUTO-PUBLISH/iPEMS_01/3.1.0.3/env/123456/bin

    为什么会这样?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Allan    7 年前

    您不应该使用 sed 正如您在下面看到的,grep已经足够了:

    $ more conf.properties conf.ini 
    ::::::::::::::
    conf.properties
    ::::::::::::::
    version.versionLicense=3.1.0.3
    ::::::::::::::
    conf.ini
    ::::::::::::::
    
    
    $ grep -oP '(?<=^project_folder=).*' conf.ini | tr -d '\r'
    /data/AUTO-PUBLISH/iPEMS_01
    
    $ grep -oP '(?<=version\.versionLicense=).*' conf.properties | tr -d '\r' 
    3.1.0.3
    

    您的脚本变成:

    a=$(grep -oP '(?<=^project_folder=).*' conf.ini | tr -d '\r')                                                                                
    b=$(grep -oP '(?<=version\.versionLicense=).*' conf.properties | tr -d '\r')
    path=${a}/{$b}/env/123456/bin
    echo $path
    

    输出为:

    /data/AUTO-PUBLISH/iPEMS_01/{3.1.0.3}/env/123456/bin
    
        2
  •  0
  •   Alex Bruce    7 年前

    conf.properties将具有\r,它现在将成为$path的一部分。