답변:
당신이 사용하는 경우
echo "$(cat input.txt)"
제대로 작동합니다.
아마 에코의 입력을 바꿈에 의해 분리되고, 그 결과는 개행없는 것 그래서, 별도의 명령으로 처리하는 것이다.
echo "$(date) something"
후행 줄 바꿈을 날짜 출력에서 제거하여 에코 출력을 날짜와 같은 줄에서 "무언가"로 만들 수 있다는 이점이 있습니다. 파일 또는 명령 출력을 "있는 그대로"저장해야하는 경우 mapfile ( help mapfile
) read -rd ''
또는 while 읽기 루프를 사용하십시오.
bash 매뉴얼 페이지, 섹션에서 인용 Command Substitution
:
포함 된 줄 바꿈은 삭제되지 않지만 단어 분리 중에 제거 될 수 있습니다.
조금 더 같은 섹션 :
큰 따옴표 안에 대체가 나타나면 단어 분리 및 경로 이름 확장이 결과에서 수행되지 않습니다.
그것이 echo "$(cat /etc/passwd)"
작동하는 이유 입니다.
또한 POSIX 사양으로 명령을 대체 하면 후행 줄 바꿈이 제거됩니다.
$ echo "$(printf "one\ntwo\n\n\n")"
one
two
따라서 파일을 통해 출력하면 줄 $(cat file.txt)
바꿈 줄이 손실 될 수 있으며 전체 파일 무결성이 우선 순위 인 경우 문제가 될 수 있습니다.
예를 들어 IFS를 비워두면 개행을 유지할 수 있습니다.
$ IFS=
$ a=$(cat links.txt)
$ echo "$a"
link1
link2
link3