IFS는 정확히 어떻게 렌더링합니까?

IFS는 정확히 어떻게 렌더링합니까?

Bash 매뉴얼 페이지와 기타 문서를 읽었지만 설명이 약간 혼란스럽습니다.

다음과 같은 간단한 스크립트가 있습니다.

#!/bin/bash

IFS=""

echo $2

var=A B C

echo $var

다음과 같이 실행하면:

LANG=C ./args2 3 4
4
./args2: line 7: B: command not found

정말 이해가 안 돼요. 왜 2달러 = 4인가요? 설명서에 다음과 같이 나와 있는 경우:

IFS 값이 비어 있으면 단어 분할이 발생하지 않습니다.

var 선언과 동일합니다. 왜 "B"에 대해 불평합니까? 그렇다면 분사는 존재하는 걸까요?

답변1

Bash 매뉴얼의 이 섹션에는 다음 단계가 나열되어 있습니다.쉘 작업

3단계에서는 스크립트가 명령, 매개변수 등으로 분류됩니다.

  • 이 단계에서는 "var=A", "B" 및 "C" 태그를 얻습니다.
  • 섹션을 참조하세요간단한 명령그것은 말합니다 (강조):

    간단한 명령은 [...]입니다. 이는 다음과 같이 구분된 일련의 단어입니다.공백

확장(4단계) 이전에는 토큰화를 수행하지 않습니다.

Qudit이 설명했듯이,당신의쉘은 "LANG=C ./args2 3 4"를 토큰으로 분할합니다.앞으로시작 명령 "./args2"

답변2

IFS에는 스크립트가 실행되기 전의 기본값이 있습니다. 매개변수 분할은 스크립트를 실행하는 bash 인스턴스에서 수행됩니다. 이는 IFS를 설정하지 않았기 때문에 정상적으로 분할됩니다.

관련 정보