탭과 줄 바꿈에 대한 ANSI C 인용이 때때로 작동하지 않습니다.

탭과 줄 바꿈에 대한 ANSI C 인용이 때때로 작동하지 않습니다.

Bash에서 줄바꿈을 사용하려고 합니다. ANSI C 따옴표(예: $'\n')가 필요하다는 것을 알았지만 일반적으로 이 방법은 나에게 적합하지 않습니다. 그래서 내가 뭘 잘못하고 있는지 궁금합니다.

# This works
>> echo $'a\nb\nc'
a
b
c

# This doesn't 
>> A=$'a\nb\nc'
>> echo $A
a b c 

# Also, this does not work
>> A="a b c"
>> echo ${A// /$'\n'}
a b c 

개행 대신 탭을 사용하면 같은 문제가 발생합니다. 다른 ANSI C 참조는 \', \", 심지어 \b처럼 작동합니다.

GNU 스매시 버전: 4.3.11(1)

답변1

다음에서 변수를 참조하지 않기 때문입니다.

echo $A

분할 및 와일드카드가 발생하기 쉽습니다. 첫 번째 단계는 변수의 내용을 확장하는 것입니다.

echo a $'\n' b $'\n' c-- 여기서 $'\n'비트는 실제 개행 문자를 나타냅니다.

그런 다음 개별 부분이 $IFS로 분할되어 다음과 같은 결과가 발생합니다.

echo a b c

그런 다음 추가 파일 이름을 생성하는 와일드카드가 없으므로 문자열이 echo.

참조 변수를 사용하면 echo "$A"분할 및 와일드카드를 억제할 수 있습니다.

IFS를 수정하는 경우 변경 사항을 직접 검토하세요.

oIFS=$IFS
IFS=
echo $A
IFS=$oIFS

관련 정보