Kiedy I echo $something >> file.txt
, nowa linia zostanie dołączona do pliku.
Co jeśli chcę dołączyć bez nowej linii?
bash
redirection
onemach
źródło
źródło
echo $something
, jego zachowanie zależy odIFS
zmiennej, a możesz skończyć z znikaniem postaci. Możesz spróbować wykonać następujące czynności:var="hello world"; echo $var
(dwie spacje między witaniem a światem) lubvar="hello world"; IFS='l'; echo $var
lubvar="-e hello \\n world"; echo $var
. Aby rozwiązać ten problem, umieść podwójne cudzysłowy wokół zmiennej w ten sposób:echo "$var"
lub użyjprintf
.Odpowiedzi:
Po to
echo -n
jest.źródło
cat
? (np. gdy masz pliksomething.txt
zamiast zmiennej$something
)printf
jest bardzo elastyczny i bardziej przenośny niżecho
. Podobnie jak implementacje C / Perl / itp., Jeśli nie przerwiesz łańcucha formatu,\n
wtedy nie zostanie wydrukowany znak nowej linii:źródło
Jeśli używasz danych wyjściowych polecenia, możesz używać xargs w połączeniu z echo
źródło
tr
to kolejna alternatywa.Jeśli używasz
echo
jako danych wejściowych, możesz uciec, któretr -d '\n'
.Ta technika działa również w przypadku przesyłania strumieniowego danych wyjściowych z innych poleceń (tylko z jednym wierszem danych wyjściowych). Ponadto, jeśli nie wiesz, czy pliki mają końcówki linii UNIX lub DOS, możesz użyć
tr -d '\n\r'
.Oto kilka testów pokazujących, że to działa.
Newline zawiera:
Nowa linia UNIX:
Styl DOS:
Testowane z BSD
tr
i GNUtr
.źródło