Linux 连接变量、cat和cut命令的结果时出现问题

Linux 连接变量、cat和cut命令的结果时出现问题,linux,bash,variables,cut,cat,Linux,Bash,Variables,Cut,Cat,我有一个bash脚本,在其中我读取一个文件.properties,并获得一个存储在变量中的属性: PROP_VALUE=`cat $PROP_FILE | grep "^$PROP_KEY" | cut -f2 -d'='` 此变量设置为5.0.1 当我想使用此变量并将其连接到第二个变量时,我得到以下结果: CONCAT=".0" echo $PROP_VALUE => Result : 5.0.1 echo $PROP_VALUE$CONCAT => Result : .00.

我有一个bash脚本,在其中我读取一个文件
.properties
,并获得一个存储在变量中的属性:

PROP_VALUE=`cat $PROP_FILE | grep "^$PROP_KEY" | cut -f2 -d'='`
此变量设置为5.0.1

当我想使用此变量并将其连接到第二个变量时,我得到以下结果:

CONCAT=".0"
echo $PROP_VALUE
=> Result : 5.0.1

echo $PROP_VALUE$CONCAT
=> Result : .00.1
这将删除第一个变量(
$PROP_VALUE
)的前两个字符,并用第二个变量(
$CONCAT
)的字符替换它们

预期结果是:5.0.1.0我的属性文件:

version=5.0.1
category=dev
env=rct
当我使用以下语法时,我也有同样的问题:

PROP_VALUE=$(cat $PROP_FILE | grep "^$PROP_KEY" | cut -f2 -d'=')
如果$PROP_VALUE是我手动创建的变量(不需要在属性文件中检索该值),则它可以工作:

PROP_VALUE="5.0.1"
CONCAT=".0"
echo $PROP_VALUE$CONCAT
=> Result : 5.0.1.0
我的属性文件:

version=5.0.1
category=dev
env=rct
当我使用以下语法时,我也有同样的问题:

PROP_VALUE=$(cat $PROP_FILE | grep "^$PROP_KEY" | cut -f2 -d'=')
如果$PROP_VALUE是我手动创建的变量(不需要在属性文件中检索该值),则它可以工作:

PROP_VALUE="5.0.1"
CONCAT=".0"
echo $PROP_VALUE$CONCAT
=> Result : 5.0.1.0


确保.properties是真实的unix文件。如果是,那么脚本就可以了。如果.properties有DOS/winslows编码,那么您就有麻烦了。我想没有其他解释了。

请确保您的.properties是一个真正的unix文件。如果是,那么脚本就可以了。如果.properties有DOS/winslows编码,那么您就有麻烦了。我想没有其他解释了。

对我来说很好。给出预期的结果<代码>回显$PROP_值$CONCAT 5.0.1.0。你能给我们看一下道具文件吗?可能在获取属性值时出错。我无法复制您的结果。顺便说一句,您应该使用
$(…)
语法在不推荐使用的backticks表单上替换命令。@danlor谁说它不推荐使用?它仍然是我们的一部分standard@oguzismail好吧,这取决于你对弃用的理解,也许这有点误导。无论如何,你可以检查一下以澄清。顺便说一句,没有必要为此折磨猫。对我来说工作很好。给出预期的结果<代码>回显$PROP_值$CONCAT 5.0.1.0。你能给我们看一下道具文件吗?可能在获取属性值时出错。我无法复制您的结果。顺便说一句,您应该使用
$(…)
语法在不推荐使用的backticks表单上替换命令。@danlor谁说它不推荐使用?它仍然是我们的一部分standard@oguzismail好吧,这取决于你对弃用的理解,也许这有点误导。无论如何,你可以查看以澄清。顺便说一句,没有必要为此折磨
cat
。这里的PROP_键的值是什么?PROP_键的值是“version”,它对我仍然有效。除了问题本身,命令替换语法只是一个建议。@Ludo06当您键入
cat“$PROP_FILE”
@hmedia1时,您会得到什么?我会得到属性文件的内容。。。用grep命令我得到属性的键,用cut命令我得到属性的值…这里的PROP_键的值是什么?PROP_键的值是“version”,它对我仍然有效。除了问题本身,命令替换语法只是一个建议。@Ludo06当您键入
cat“$PROP_FILE”
@hmedia1时,您会得到什么?我会得到属性文件的内容。。。用grep命令我得到属性的键,用cut命令我得到属性的值…我想问题就出在那里。。。但是我不能将文件“转换”为它在windows环境下不再“工作”的风险…@Ludo06互操作性不应该是问题,除非此属性文件是使用一些奇怪的编码以编程方式生成的。使用
file.properties
查看它的编码是什么。将其转换为UTF8应该不是问题,或者使用工具
dos2unix
。。。用它转换的文件在Windows中可以很好地打开。您可以使用(未测试的)
PROP\u VALUE=${PROP\u VALUE%$'\r'}
(特定于Bash)-无需编辑输入文件。上面的评论很有希望。或者,您可以通过管道传输dos2unix的输出:cat | dos2unix | grep。我没有一个系统可以尝试,所以这只是一个未经测试的想法。我认为问题来自那里。。。但是我不能将文件“转换”为它在windows环境下不再“工作”的风险…@Ludo06互操作性不应该是问题,除非此属性文件是使用一些奇怪的编码以编程方式生成的。使用
file.properties
查看它的编码是什么。将其转换为UTF8应该不是问题,或者使用工具
dos2unix
。。。用它转换的文件在Windows中可以很好地打开。您可以使用(未测试的)
PROP\u VALUE=${PROP\u VALUE%$'\r'}
(特定于Bash)-无需编辑输入文件。上面的评论很有希望。或者,您可以通过管道传输dos2unix的输出:cat | dos2unix | grep。我没有一个系统可以尝试,所以这只是一个未经测试的想法。