명령줄에서 여러 줄 파일을 만드는 방법은 무엇입니까? [복사]

명령줄에서 여러 줄 파일을 만드는 방법은 무엇입니까? [복사]

파일에 다음을 입력하려면 어떻게 해야 합니까?

Hi
abcd

사용해 보았지만 echo "Hi\nabcd" >> ab.txt파일에는 있는 그대로 작성되었습니다( \n개행 문자가 아닌 포함).

답변1

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

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

답변2

행동echo쉘에 따라 다릅니다.printf행동이 더 표준화되었습니다.

printf "Hi\nabcd" >> ab.txt

1 "사용할 수 없습니다에코두 시스템을 제외한 모든 POSIX 시스템에 이식 가능-N(첫 번째 인수로) 및 이스케이프 시퀀스는 생략됩니다. "

답변3

나는 사용하는 것이 좋습니다bash 쉘 함수가 호출됩니다.여기 문서. 당신이 설명하는 것을 구현하는 가장 우아한 형태인 것 같습니다. 무엇보다도 여러 줄의 내용은 읽을 수 없고 구분된 긴 \n문자열 대신 출력 파일에 있는 내용과 똑같습니다.

cat > ab.txt <<EOL
Hi
abcd
EOL

여기의 태그는 EOL끝을 찾기 위해 무엇을 찾아야 하는지 쉘에 알려줍니다.여기 문서. 정확히 일치하지 않는 것을 선택하도록 단어를 임의로 선택할 수 있습니다.여기 문서내용 그 자체. 장점은 쉘을 대신 사용할 수 있다는 것입니다 ${VARIABLES}. 이런 일이 발생하지 않도록 하려면 항상 여는 태그 단어(첫 번째만!)를 따옴표( )로 묶어 '이를 방지할 수 있습니다.

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

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

답변4

따옴표를 사용하여 게임을 플레이할 수도 있습니다.

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

"Hi" 다음에 "Enter"를 누르면 bash에 이를 입력할 수 있습니다. Bash는 명령 계속 프롬프트로 ">"를 사용합니다. 어떤 이유로 백슬래시를 사용하여 별도의 반환을 피할 수 없습니다.

관련 정보