bash에서 줄 바꿈 문자가 에코되지 않습니다.


13

나는 많은 echo문장 을 가진 bash 스크립트를 가지고 있으며 in 과에 별명 echo을 지정 하므로 출력 과 같은 문장에 대해 새 줄이 올바르게 인쇄됩니다 .echo -e.bash_profile.bashrcecho 'Hello\nWorld'

Hello
World

하지만 내가 얻는 결과는

Hello\nWorld

shopt -s expand_aliases스크립트에서 사용해 보았지만 도움이되지 않습니다.

스크립트를 다음과 같이 실행하고 있습니다 bash /scripts/scriptnm.sh. . /scripts/scriptnm.sh원하는 출력을 얻을 때 실행하면 ...


3
echo당신이 원하는 것처럼 앨리어싱 은 나쁜 연습 IMHO
— shellholic

1
\ n이 해석되도록 큰 따옴표를 사용하십시오. 작은 따옴표는 \ n 및 다른 많은 것들의 해석을 방해합니다.
— BillThor

답변:


16

혼합 히스토리는 echo기본 조작이 쉘마다 다릅니다. POSIX 는 첫 번째 인수 이거나 임의의 인수에 백 슬래시가 포함 된 경우 결과 가 "구현 정의 됨"으로 지정 합니다 .echo-n

그것은 사용하는 것이 더 신뢰할 수있다 printf(중 같은 내장 명령 또는 외부 명령) 동작이 더 잘 정의 된 경우 : C 스타일의 백 슬래시 이스케이프와 형식 지정 형식 문자열에서 지원됩니다 (첫 번째 인수).

printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar

당신의 백 슬래시 이스케이프 시퀀스의 확장을 제어 할 수 있습니다 bash는 의 echo내장 명령으로 xpg_echo쉘 옵션을 선택합니다.

모든 echo 명령 에 추가 할 필요없이 백 슬래시 이스케이프를 자동으로 확장 하도록 bash 스크립트 맨 위에 설정하십시오 .echo-e

shopt -s xpg_echo
echo 'foo\nbar'

shopt -s xpg_echo; 나를 위해 일했다.
— Bashuser

6

을 사용 bash myfile.sh하면 Bash는 별도의 프로세스 에서 "일괄 처리"모드로 실행되며 해당 프로파일 또는 rcfile을 읽지 않습니다 .

을 사용 . myfile.sh하면 파일은 현재 쉘 프로세스에 의해 소스 화 되므로 (내용이 사용자가 입력 한 것처럼) 현재 정의 된 별명을 볼 수 있습니다.

일반적으로 스크립트 자체 에서 정의하지 않는 한 특정 쉘 구성, 특히 별칭 에 의존하는 스크립트를 작성하는 것은 매우 나쁜 생각 입니다. ( 자신의 것이더라도 사용자의 의지 하지 마십시오 .).bashrc



1

이것은 터미널에서 잘 작동합니다

#!/bin/bash
alias echo="echo -e"
echo "Hello\nWorld"

파일에 저장하고 실행 가능하게 (chmod + x)

./your_file로 실행


bash your_file로 실행하고 출력을 확인하십시오.
— Bashuser

예상대로 작동
— LaLeX

그러나 echo "Hello \ nWorld"에 예상 출력이 표시되지 않습니다. echo가 이미 echo -e에 별명을 지정 했으므로 작동해야하지만 제대로 작동하지 않습니다.
— Bashuser

echo (
— 별도의

귀하의 답변에 대해 LaLex에게 감사드립니다. 별명은 아니지만 좋은 결과를 얻을 수있는 방법이
— 있습니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.