Jeśli mam plik input.txt
zawierający:
hello
world
!
Następnie wykonanie polecenia bash echo $(cat input.txt)
wyświetli to:
hello world !
Dlaczego i jak mogę to naprawić, aby wyświetlało dokładnie to, co jest w pliku, jak jest w pliku?
command-line
bash
f. kardynał
źródło
źródło
echo "$(date) something"
Usuwa końcowy znak nowej linii z wyjścia date, dzięki czemu echo wypisuje datę i „coś” w tym samym wierszu. Jeśli chcesz zapisać plik lub dane wyjściowe polecenia „tak jak jest”, użyj mapfile (help mapfile
)read -rd ''
lub pętli odczytu while.Cytat ze strony podręcznika bash, sekcja
Command Substitution
:Nieco dalej, ta sama sekcja:
Właśnie dlatego
echo "$(cat /etc/passwd)"
działa.Ponadto należy pamiętać, że podstawienie polecenia według specyfikacji POSIX usuwa końcowe znaki nowego wiersza:
W związku z tym wysyłanie pliku przez
$(cat file.txt)
może prowadzić do utraty końcowych znaków nowego wiersza, co może stanowić problem, jeśli integralność całego pliku ma priorytet.źródło
Możesz zachować nowe wiersze, na przykład ustawiając IFS na pusty:
źródło