#!/usr/local/bin/bash
out=`grep apache README`
echo $out;
Zwykle grep wyświetla każde dopasowanie w osobnym wierszu, gdy jest uruchamiany w wierszu poleceń. Jednak w powyższych skryptach znak nowej linii oddzielający każde dopasowanie znika. Czy ktoś wie, jak można zachować nową linię?
Odpowiedzi:
Nie tracisz go w zadaniu, ale w echu. Możesz to wyraźnie zobaczyć, jeśli:
echo "${out}"
Podobny efekt zobaczysz w następującym skrypcie:
x="Hello, I am a string with newlines" echo "=====" echo ${x} echo "=====" echo "${x}" echo "====="
które wyjścia:
I nie ma to związku z twoim pytaniem, ale i tak chciałbym o nim wspomnieć, wolę używać konstrukcji $ () zamiast znaków odwrotnych, tylko dla dodatkowej korzyści, jaką jest możliwość zagnieżdżania poleceń. Więc twoja linia skryptu staje się:
To może nie wyglądać inaczej (i nie jest), ale umożliwia bardziej złożone polecenia, takie jak:
źródło
Umieść $ w cudzysłowie:
#!/usr/local/bin/bash out=`grep apache README` echo "$out";
źródło
Cytowanie zmiennych w bashu zachowuje białe znaki.
Na przykład:
#!/bin/bash var1="A B C D" echo $var1 # A B C D echo "$var1" # A B C D
ponieważ nowe linie są spacjami, są „usuwane”
źródło
Łączenie innych odpowiedzi w jedną wkładkę:
echo "($(grep apache README))"
źródło