【问题标题】:Shell script — weird behaviour after concatenating string with variablesShell 脚本 — 将字符串与变量连接后的奇怪行为
【发布时间】:2017-02-28 14:49:58
【问题描述】:

我正在从我的 shell 脚本中读取一个 .properties 文件。 我想为某个键读取一些值,然后想将它附加到某个字符串之间,但输出很奇怪。

#!/bin/bash
# Script used to read Property File
FILE_NAME="Test.properties"
prop_value=$(cat ${FILE_NAME} | grep Address)
echo "ABC${prop_value}DEF"

我的Test.properties是这样的

Name=Pravin
Age=25
Address=Mumbai
asd=asd

执行此脚本后,我期待

ABCAddress=MumbaiDEF 

但我得到的输出类似于

DEFAddress=Mumbai 

这里有什么问题?

如果我在脚本中定义任何变量,它可以工作,但是当我使用命令扩展从文件中读取它时,它就不起作用了。

【问题讨论】:

  • 您的文件是 DOS 格式。它包含回车,在打印时将光标发送到行首。
  • 顺便说一句,这里还有 shellcheck.net 会发现的其他错误。
  • 代码的其他问题,请参阅UUoC — Useless Use of cat。我确定这是重复的;找到副本会更难(而且可能不值得努力)。

标签: shell sh


【解决方案1】:

要在展开时从变量中修剪回车,您可以使用${varname%$'\r'}。因此:

echo "ABC${prop_value%$'\r'}DEF"

最好将您的属性文件保存为原生 Unix 文本文件,其中根本不包含回车符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2013-10-04
    • 2015-11-14
    相关资源
    最近更新 更多