Linux의 IFS 변수

Linux의 IFS 변수

친애하는, 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

관련 정보