대표적인 경우는 입니다 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
미리 감사드립니다IFS
IFS= read
답변1
설명에 따르면 IFS
bash는 환경에서 가져오기를 허용하지 않기 때문에 예제가 스크립트에 설정 되지 않았습니다.IFS
variables.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>
IFS
IFS
IFS
IFS
IFS
IFS
IFS
IFS