친애하는, IFS 변수에 빈 값이 표시되는 이유가 무엇인지 아십니까?
bash-4.2$ set | grep -i ifs
IFS=$' \t\n'
bash-4.2$ echo $IFS
bash-4.2$
bash-4.2$
답변1
빈 값이 표시되는 이유는 다음과 같습니다.그게 바로 그거야~이다항상 IFS에 저장됨: 공백(표시되지 않음), 탭(표시되지 않음) 및 줄바꿈(표시되지 않음)을 포함합니다.
여기에는 달러 기호, 백슬래시 또는 문자가 포함되어 있지 않습니다. 이는 단순히 set
보이지 않는 문자가 포함된 변수를 표시하려고 시도하는 방식입니다. 따라서 그는 \t
탭을 나타내고 은 \n
줄 바꿈을 나타내며 주변은 $'...'
백슬래시 조합이 리터럴 텍스트가 아닌 특수 문자로 해석되어야 함을 나타냅니다.
set
이 특정 형식을 사용하는 이유는 다음과 같습니다.뒤쪽에다른 명령의 일부로 쉘에. 예를 들어, run은 echo $'Hello\tworld!
있는 탭을 인쇄합니다 \t
. 그리고 실제로달리기 IFS=$' \t\n'
명령은 실제로 IFS 변수를 공백 + 탭 + 줄 바꿈으로 설정합니다.
답변2
\t
입력 시 및가 \n
구문 분석되어 실제 문자 코드로 변환되기 때문입니다 . 따라서 출력은 echo $IFS
공백처럼 보입니다. 일부는 인용하지 않았기 때문에 인수 구문 분석에 의해 제거됩니다. 실제 내용을 보려면 16진수로 변환하고 문자가 구문 분석되지 않도록 인용하는 것을 잊지 마세요.
IFS=$' \t\n'
printf '%s' "$IFS" | hd
00000000 20 09 0a | ..|
00000003
0