2017-01-10 1 views
0

Ich habe eine Variable, die einer Zeichenfolge entspricht, die eine Reihe von Schlüssel/Wert-Paaren ist, die durch Zeilenumbrüche getrennt sind.Setzen Sie die Bash-Variable gleich dem Ergebnis der Zeichenfolge, wobei Zeilenumbrüche durch Leerzeichen ersetzt werden.

Ich möchte dann diese Newline Zeichen mit Leerzeichen ersetzen, und legen Sie eine neue Variable

Aus verschiedenen Antworten auf das Ergebnis gleich im Internet ich im folgenden angekommen sind:

#test.txt has the content: 
#test=example 
#what=s0omething 

vars="$(cat ./test.txt)" 

formattedVars= $("$vars" | tr '\n' ' ') 
echo "$taliskerEnvVars" 

Problem I ist, wenn versuchen formattedVars zu setzen versucht, die zweite Zeile auszuführen:

script.sh: line 7: test=example 
what=s0omething: command not found 

ich gleichnur formattedVars wollen

Welchen Trick vermisse ich?

+0

Entfernen 'cat' und verwendet nur' formattedVars = $ (tr '\ n' '' anubhava

+0

[bearbeiten] Ihre Frage, um prägnante, testbare Beispieleingabe und erwartete Ausgabe einzuschließen. Sie sind auf dem Holzweg und bekommen Antworten, die Ihnen helfen, diese falsche Fährte zu implementieren, anstatt Ihr Problem auf die richtige Art und Weise zu lösen. –

Antwort

1

Ändern Sie Ihre Linie:

formattedVars=$(tr '\n' ' ' <<< "$secretsContent") 

Beachten Sie den Raum von = im Code, die nicht in Zuweisungsanweisungen zulässig ist.

Ich sehe, dass Sie secretsContent in Ihrem Code nicht einstellen, Sie setzen stattdessen vars.

+1

Ein Leerzeichen nach dem ist zulässig (aber verhält sich nicht wie erwartet), es ist vorher ein Syntaxfehler. Sein tatsächliches Problem ist, die Variable '$ secretsContent' zu verwenden, als ob es ein Befehl wäre. – Aaron

+0

Entschuldigung, das war mein Fehler beim Schreiben der Frage. Habe jetzt bearbeitet ... – MDalt

1

Wenn möglich, ein Array verwenden Inhalt der Datei zu halten:

readarray -t vars < ./test.txt # bash 4 

oder

# bash 3.x 
declare -a vars 
while IFS= read -r line; do 
    vars+=("$line") 
done < ./test.txt 

Dann können Sie tun, was Sie mit dem Array benötigen. Sie können Ihre durch Leerzeichen getrennte Liste mit

machen, aber überlegen Sie, ob Sie müssen. Wenn das Ziel ist es, sich als Pre-Befehlsmodifizierers zu verwenden, zu verwenden, zum Beispiel

"${vars[@]}" my_command arg1 arg2 
Verwandte Themen