을 위한:
$hello="hello
> world"
echo
개행 문자가 인쇄되지 않는 이유는 무엇입니까 ?
echo -e $hello
하지만 따옴표를 추가하면 $hello
괜찮습니다.
$ echo "$hello"
hello
world
ANSI-C 인용 때문인가요? echo -e
내가 입력한 개행 문자가 해석되어서 는 안 되나요 ?
답변1
매뉴얼 페이지 에서는 bash
변수 내용에 따라 단어 분리가 수행되는 방법을 설명합니다 IFS
.
분사
쉘은 단어 분할을 위해 큰따옴표 안에 표시되지 않는 인수 확장, 명령 대체 및 산술 확장의 결과를 스캔합니다.
쉘은 각 문자를
IFS
구분 기호로 처리하고 이러한 문자를 필드 종결자로 사용하여 다른 확장 결과를 단어로 분할합니다. 설정 되지 않거나 해당 값이 기본값IFS
인 경우 이전 확장 결과의 시작과 끝 부분에 있는 , 및 의 시퀀스는 무시 되고 시작이나 끝이 아닌 IFS 문자 시퀀스는 단어를 구분하는 데 사용됩니다 . 기본값이 아닌 값을 사용하면 공백 문자가 값 ( 공백 문자) 내에 있는 한 단어의 시작과 끝 부분에 있는 공백과 탭 시퀀스는 무시됩니다. 공백이 아닌 문자 와 인접한 공백 문자는 필드를 구분합니다. 공백 문자 시퀀스 도 구분 기호로 간주됩니다. 값이 비어 있으면 단어 분할이 발생하지 않습니다.<space><tab><newline>
<space>
<tab>
<newline>
IFS
IFS
IFS
IFS
IFS
IFS
IFS
IFS
명시적으로 빈 매개변수(
""
또는)가 유지됩니다.''
값이 없는 매개변수 확장으로 인해 암시적으로 인용되지 않은 null 매개변수는 제거됩니다. 값이 없는 매개변수를 큰따옴표로 확장하면 빈 매개변수가 생성되고 유지됩니다.확장이 발생하지 않으면 분할이 수행되지 않습니다.
bash
변수에 큰따옴표가 없으면 변수는 단어 분할이 되어 hello
두 world
개의 다른 매개변수가 됩니다 echo
. echo
매개변수 사이에 공백을 두십시오.