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