2013-10-11 5 views
0

Я пытаюсь понять, как IFS работает с этим простым кодом, который я написал. Но это не работает, может ли кто-нибудь объяснить, почему это не работает?установка IFS через систему() в unix

#include <stdio.h> 
void main() 
{ 
    system("export IFS='/'; /bin/date"); 
} 

В соответствии с вышеуказанным кодом, команда «/ бен/дата» должна быть разделена на 2 команды, как в «бункере» и «дата», но этого не происходит.

ответ

0

IFS используется для расщепления слов после расширения. Здесь нет расширения, поэтому IFS не имеет отношения к делу. Нет смысла делать это через «систему», поскольку это просто запутывает проблему. Рассмотрим из оболочки следующее:

$ k=/bin/date 
$ /bin/date # execute /bin/date 
$ $k # expand k, perform word-splitting (nothing happens), run /bin/date 
$ IFS=/ 
$ /bin/date # execute /bin/date 
$ $k # expand k, perform word-splitting to get 3 words: "", "bin", "date" 
     # attempt (and fail) to invoke a command with the name "" and arguments 
     # "bin", "date"