[cdev] Задание по утилите Echo
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Пн Мар 15 19:15:26 MSK 2010
Очень много замечаний.
У меня ощущение что это писали не вы. Придётся с вами очно встречаться
перед сдачей.
1. Прочтите LKCS и следуйте этому стилю, я неоднократно упоминал где это
можно сделать. Пересмотрите архивы подписки -
http://wiki.syktsu.ru/pipermail/cdev/.
2. В Си нельзя делать вложенные функции, откуда это у вас - я не знаю.
3. Файлы с исходным текстом должны иметь расширение `*.c'.
4. Комментарии в Си начинаются с `/*' и заканчиаются `*/'. И хотя
большинство современных компиляторов понимают и стиль C++ `//' но лучше
пользовать родной стиль языка.
5. Так как, ещё раз повторюсь, кто-то писал вам это - весь исходник
перекомментирован. Даже совсем очевидные вещи, где комментировать не надо.
Программу на помойку можно выкидывать. Она должна компилироваться gcc
для начала.
Дизайн программы не верный, у вас могут быть опции -n и -e одновременно.
Теперь по вашим вопросам.
1. Ходить посимвольно можно очень просто. Если у вас есть указатель на
первый символ строки, в данном случае это argv[i] то вам можно сделать
что-то вроде:
/*------------------------------*/
char *c;
...
c = argv[i];
while (*c) {
if (*c == '\') {
++c;
switch (*c) {
case 'a':
...
break;
case 'b':
...
break;
case '\\':
...
break;
...
}
} else {
...
}
}
/*------------------------------*/
В этом примере показан и "скелет" обработки специальных
последовательностей - ответ на вопрос об обработке параметров `\b' и т.д.
2. Утилита echo(1) срабатывает только с двумя обратными слешами с
командной строки потому что обратный слеш имеет специальное значение для
командного интерпретатора - это ESC-символ. Поэтому если вам нужно
передать с командной строки в аргументы сам символ `\', то вам надо
вставить его два раза `\\'. Первый обратный слеш сигнализирует что
следующий символ нужно передать таким какой он есть буквально, а второй
обратный слеш сам символ, который будет передан в аргументы программе.
Если вы хотите чтобы утилита echo, запущенная с опцией -e, напечатала
символ `\' то с командной строки вы его туда целых четыре раза введёте.
Потому что первый раз это будет ESC-символ, второй раз обратный слеш для
указания специальной последовательности, третий должен быть ESC-символом
для четвёртого символа обратного слеша.
$ echo -e aa\\\\aa
aa\aa
--
Г.А.
Карабанова Елена пишет:
> Здравствуйте!
> Я разобралась с функцией getopt.
> Можете посмотреть код программы с комментариями (он прилагается), чтобы хоть понять правильным ли я путем двигаюсь
>
> У меня вопрос, как можно отследить в строке аргументов "\", чтобы можно было обработать допустим параметр - \b
> argv - это же массив указателей на аргументы (слова) которые ввел пользователей
> по идеи посимвольно смотреть нужно каждое слово, вот только как обратиться незнаю к символу
>
> и вот стандартная утилита echo, она начинает реагировать на параметр \b только после ввода \\b почему так?
> echo -e \\t
>
>
>
Подробная информация о списке рассылки cdev