2017-02-28 1 views
0

Ich lese eine .properties Datei aus meinem Shell-Skript. Ich wollte etwas Wert für einen Schlüssel lesen und danach zwischen eine Zeichenfolge anhängen, aber die Ausgabe ist seltsam.Shell-Skript - merkwürdiges Verhalten nach Verketten der Zeichenfolge mit Variablen

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

meine Test.properties ist wie dieser

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

Nach der Ausführung dieses Skripts ich erwarte

ABCAddress=MumbaiDEF 

aber ich bin immer eine Ausgabe wie

DEFAddress=Mumbai 

Was würde Sei das Problem hier?

Wenn ich eine Variable in einem Skript definieren, funktioniert es, aber wenn ich es aus Datei mit Befehlserweiterung lesen, funktioniert es nicht.

+2

Ihre Datei ist im DOS-Format. Es enthält Zeilenumbrüche, die den Cursor beim Ausdruck an den Anfang der Zeile senden. –

+0

BTW, Sie haben andere Fehler hier, die http://shellcheck.net/ fangen wird. –

+0

Unter anderem Probleme mit dem Code finden Sie unter [UUoC - unbrauchbare Verwendung von 'cat'] (https://stackoverflow.com/questions/11710552/useless-use-of-cat). Ich bin mir sicher, das ist ein Duplikat. das Duplikat zu finden wird schwieriger (und wahrscheinlich nicht die Mühe wert). –

Antwort

1

Um Wagenrückläufe von einer Variablen bei der Erweiterung zu trimmen, können Sie ${varname%$'\r'} verwenden. Also:

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

Besser wäre Ihre Eigenschaften als native Unix-Textdatei-Datei zu speichern, die überhaupt keine Zeilenumbrüche enthalten.

Verwandte Themen