명령줄에서 여러 줄이 포함된 파일을 어떻게 만들 수 있나요?

명령줄에서 여러 줄이 포함된 파일을 어떻게 만들 수 있나요?

파일에 다음 내용을 어떻게 입력할 수 있습니까?

Hi
abcd

을 사용해 보았 echo "Hi\nabcd" >> ab.txt으나 파일에는 그대로 작성되었습니다( \n개행 문자 대신 이 포함됨).

답변1

echo이스케이프 시퀀스를 존중하도록 지시해야 합니다 .

echo -e "Hi\nabcd" >> ab.txt

답변2

행동echo쉘마다 다릅니다 ¹;printf의 행동이 더 표준적입니다.

printf "Hi\nabcd" >> ab.txt

¹ "사용할 수 없습니다에코두 가지 모두가 아닌 이상 모든 POSIX 시스템에서 이식 가능-N(첫 번째 인수로) 및 이스케이프 시퀀스는 생략됩니다."

답변3

나는 사용하는 것이 좋습니다bash 쉘 기능이라고 함여기 문서. 당신이 설명하는 것을 달성하는 가장 우아한 형태처럼 보입니다. 가장 중요한 것은 여러 줄의 내용이 출력 파일에 있는 것과 정확히 동일한 방식으로 보인다는 것입니다(읽을 수 없고 길고 \n분리된 문자열과 반대).

cat > ab.txt <<EOL
Hi
abcd
EOL

여기 EOL에는 쉘의 끝을 찾기 위해 어떤 쉘을 찾아야 하는지 알려주는 마커가 있습니다.여기 문서. 우연히 모순되지 않는 단어를 선택할 수 있는 단어를 임의로 선택할 수 있습니다.여기 문서의 내용 그 자체입니다. 좋은 점은 ${VARIABLES}대체할 쉘을 가질 수 있다는 것입니다 . 그것이 원하지 않는 경우에는 항상 시작 부분(시작 부분만!) 표시 단어를 따옴표( ')로 묶어 이를 방지할 수 있습니다.

저는 개인적으로 환경을 설정할 때 다음과 같이 작은 구성 파일을 만들기 위해 init 스크립트에서 이것을 많이 사용합니다.

cat > ~/.screenrc <<END_OF_HEREDOC_MARKER
defscrollback ${MAX_LINES}
END_OF_HEREDOC_MARKER

답변4

다음을 인용하여 게임을 할 수도 있습니다.

 % echo 'Hi
> abcd' >> ab.txt

"Hi" 다음에 "Enter"를 눌러 bash에 입력합니다. Bash는 나에게 명령 연속 프롬프트로 '>'를 사용합니다. 어떤 이유로든 백슬래시를 사용하여 개별 반환을 피할 수 없었습니다.

관련 정보