Bash 스크립트용 IFS 설정

Bash 스크립트용 IFS 설정

대표적인 경우는 입니다 IFS= read.
이 주제는 이 스레드에 잘 설명되어 있습니다.
Bash에서 명령 전에 변수를 설정하는 것이 합법적인 이유는 무엇입니까?
완전한 이해를 돕기 위해 아래 스크립트가 예상한 대로 작동하지 않는 이유를 설명해 주시면 정말 감사하겠습니다.
my_script:

#!/bin/bash

echo "$var1"
echo -n "$IFS" | xxd -p
echo "$var2"

exit 0

부르다 my_script:

var1=foo IFS= var2=bar my_script

산출:

foo
20090a
bar

보시다시피 IFS아무것도 변경되지 않았으며 여전히 기본값으로 설정되어 있습니다. 로 전화할 때 사용자 정의를 얻는
방법은 무엇입니까 ? read미리 감사드립니다IFSIFS= read

답변1

설명에 따르면 IFSbash는 환경에서 가져오기를 허용하지 않기 때문에 예제가 스크립트에 설정 되지 않았습니다.IFSvariables.c:

  /* Don't allow IFS to be imported from the environment. */
  temp_var = bind_variable ("IFS", " \t\n", 0);
  setifs (temp_var); 

내장 명령 및 비-스크립트물론, get을 사용하여 할당합니다 IFS. 하지만 이는 다음 IFS과 같은 경우에만 작동한다는 점을 기억하세요.분사:

쉘은 각 문자를 $IFS구분 기호로 처리하고 이러한 문자를 필드 종결자로 사용하여 다른 확장 결과를 단어로 분할합니다. 설정 되지 IFS않거나 해당 값이 기본값인 경우 <space><tab><newline>이전 확장 결과의 시작과 끝 부분에 있는 , 및 의 시퀀스는 무시되고 <space>시작 <tab>이나 끝이 아닌 문자 시퀀스는 단어를 구분하는 데 사용됩니다. 기본값이 아닌 값을 사용하면 공백 문자가 값(공백 문자) 내에 있는 한 단어의 시작과 끝 부분에 있는 공백과 탭 시퀀스는 무시됩니다. IFS 공백이 아닌 모든 문자와 인접한 공백 문자는 필드를 구분합니다. 공백 문자 시퀀스도 구분 기호로 간주됩니다. 값이 비어 있으면 단어 분할이 발생하지 않습니다.<newline>IFSIFSIFSIFSIFSIFSIFSIFS

관련 정보