#!/usr/local/bin/bash
out=`grep apache README`
echo $out;
Normalerweise zeigt grep jede Übereinstimmung in einer separaten Zeile an, wenn sie in der Befehlszeile ausgeführt wird. In den obigen Skripten verschwindet jedoch die neue Zeile, die jede Übereinstimmung trennt. Weiß jemand, wie die Newline erhalten werden kann?
Antworten:
Sie verlieren es nicht in der Aufgabe, sondern im Echo. Sie können dies deutlich sehen, wenn Sie:
echo "${out}"
Sie sehen einen ähnlichen Effekt mit dem folgenden Skript:
x="Hello, I am a string with newlines" echo "=====" echo ${x} echo "=====" echo "${x}" echo "====="
welche Ausgänge:
Und, für Ihre Frage irrelevant, aber ich möchte es trotzdem erwähnen, bevorzuge ich das Konstrukt $ () anstelle von Backticks, nur um den zusätzlichen Vorteil zu haben, dass Befehle verschachtelt werden können. So wird Ihre Skriptzeile:
Das sieht vielleicht nicht anders aus (und ist es auch nicht), aber es ermöglicht komplexere Befehle wie:
quelle
Setzen Sie $ in Anführungszeichen:
#!/usr/local/bin/bash out=`grep apache README` echo "$out";
quelle
Durch das Zitieren von Variablen in Bash bleibt das Leerzeichen erhalten.
Zum Beispiel:
#!/bin/bash var1="A B C D" echo $var1 # A B C D echo "$var1" # A B C D
Da Zeilenumbrüche Leerzeichen sind, werden sie "entfernt".
quelle
Kombinieren Sie andere Antworten zu einem Einzeiler:
echo "($(grep apache README))"
quelle