echo 명령과 리디렉션 연산자를 사용하여 파일에 개행 특수 문자를 넣는 방법은 무엇입니까?

echo 명령과 리디렉션 연산자를 사용하여 파일에 개행 특수 문자를 넣는 방법은 무엇입니까?

여러 줄로 구성되어야 하는 echo 명령과 리디렉션 연산자를 사용하여 파일을 만들고 싶습니다.

문자열에 "\n" 개행 문자를 포함해 보았습니다.

echo "first line\nsecond line\nthirdline\n" > foo

그러나 세 줄의 파일을 생성하는 대신 한 줄과 문자열의 축어적 내용으로만 파일을 생성합니다.

이 명령만 사용하여 여러 줄로 구성된 파일을 어떻게 만들 수 있나요?

답변1

echo명령에서 몇 가지 구문을 요청했습니다 .

echo $'first line\nsecond line\nthirdline' > foo

(그러나 당신이 얻는 다른 답변도 고려하십시오.)

$'...'구조는 내장된 ANSI 이스케이프 시퀀스를 확장합니다.

답변2

문자 이스케이프에 대한 에코의 효과는 구현에 따라 정의됩니다. 대부분의 최신 구현을 포함하여 많은 echo 구현에서는 기본적으로 전달된 문자열에 대한 이스케이프가 전혀 확인되지 않습니다.

GNU bash(내장)에서 제공하는 echo와 일부 다른 echo 변형을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

echo -en 'first line\nsecond line\nthird line\n' > file

그러나 그것은 당신이 원하는 것처럼 들립니다 printf. 이것은 나에게 더 깨끗하고 이식성이 뛰어납니다. (이 기능은 POSIX에 의해 정의되어 있습니다.)

printf '%s\n' 'first line' 'second line' 'third line' > file

다음을 사용하는 것도 고려할 수 있습니다.여기 문서:

cat > file << 'EOF'
first line
second line
third line
EOF

답변3

명령을 사용하여 여러 줄 파일을 만드는 다른 방법은 다음과 같습니다 echo.

echo "first line"  >  foo
echo "second line" >> foo
echo "third line"  >> foo

이러한 명령 중 두 번째와 세 번째는 >>리디렉션 연산자를 사용합니다. 이로 인해 명령 출력이 파일(이 시점에 이미 존재해야 함)에 추가(추가)됩니다.

또는

(echo "first line"; echo "second line"; echo "third line") > foo

여기서 괄호는 echo명령을 여러 줄을 출력하는 단일 프로그램처럼 보이고 동작하는 하위 프로세스로 그룹화합니다(예: ls).

위의 미묘한 변화는

{ echo "first line"; echo "second line"; echo "third line";} > foo

이것은약간하위 프로세스를 생성하지 않기 때문에 두 번째 답변보다 더 효율적입니다. 그러나 구문은 약간 까다롭습니다. 뒤에는 공백이 있어야 하고 {앞에는 세미콜론이 있어야 합니다 }.

바라보다쉘의 제어 및 리디렉션 연산자는 무엇입니까?더 많은 정보를 알고 싶습니다.

답변4

POSIX 7에서는 할 수 없다고 말합니다.

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html

-e정의되지 않음, 백슬래시는 구현에 따라 정의됩니다.

첫 번째 피연산자가 -n이거나 피연산자에 <backslash> 문자가 포함된 경우 결과는 구현에 따라 정의됩니다.

선택적 XSI 확장이 없는 한.

그래서 사용printf대신에:

형식 피연산자는 XBD 파일 형식 표기법 [...]에 설명된 형식 문자열로 사용됩니다.

이것파일 형식 표기:

\n <newline> 인쇄 위치를 다음 줄의 시작 부분으로 이동합니다.

또한 Ubuntu 15.10과 대부분의 배포판은 다음 echo과 같이 두 가지를 모두 구현합니다.

  • 내장 배쉬:help echo
  • 독립형 실행 파일:which echo

이로 인해 약간의 혼란이 발생할 수 있습니다.

관련 정보