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.