Что-e делает в хижине удара?

Я решил записать причину программы C, я скучал.

Необходимо, вероятно, добавить контроль ввода, но кроме это все установлено.

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char c = argv[1][0];
        char * line = NULL;
        size_t len = 0;
        while (getline(&line, &len, stdin) != -1)
        {
                int count = 0;
                char * s = line;
                while (*s) if(*s++ == c) count++;
                printf("%d\n",count);
        }
        if(line) free(line);
}
36
30.06.2011, 22:42
3 ответа

Ошибочный выход. Больше флагов

Если будет ошибка, то она выйдет сразу же.

$? статус выхода прошлой команды. В Linux статус выхода 0 средств, что команда была успешна. Любое другое состояние означало бы, что ошибка произошла.

egrep "^username"/etc/passwd>/dev/null искал бы имя пользователя под/etc/passwd файлом. Если это находит его затем $ статуса выхода? будет равно 0. Если это не найдет это, то статус выхода будет чем-то еще (не 0), следовательно Вы "отзоветесь эхом, не существует".

38
27.01.2020, 19:36
  • 1
    Кроме того, можно заставить сценарий работать правильно без-e путем замены первых двух строк if egrep "^username" /etc/passwd >/dev/null. –   30.06.2011, 22:50
  • 2
    Почему нет set требуемый, хотя? :-/ –   30.06.2011, 23:44
  • 3
    @pst: Поскольку -e дан для избиения как параметр командной строки. Все опции, перечисленные под set также приняты, избивают его командную строку – отмечают первое предложение в разделе Options страницы руководства. –  user1686 03.07.2011, 21:40

Все переключатели командной строки удара документируются в man bash.

      -e      Exit  immediately  if a pipeline (which may consist of a
              single simple command),  a subshell command enclosed  in
              parentheses,  or one of the commands executed as part of
              a command list enclosed by  braces  (see  SHELL  GRAMMAR
              above) exits with a non-zero status.  The shell does not
              exit if the command that fails is part  of  the  command
              list  immediately  following  a  while or until keyword,
              part of the test  following  the  if  or  elif  reserved
              words,  part  of any command executed in a && or || list
              except the command following the final  &&  or  ||,  any
              command  in a pipeline but the last, or if the command's
              return value is being inverted with !.  A trap  on  ERR,
              if set, is executed before the shell exits.  This option
              applies to the shell environment and each subshell envi-
              ronment  separately  (see  COMMAND EXECUTION ENVIRONMENT
              above), and may cause subshells to exit before executing
              all the commands in the subshell.
16
27.01.2020, 19:36
  • 1
    Ahh. Я искал его в человеке, но после нахождения-e в тестах файла и никаком-e под основными аргументами я сдался. Хорошая выборка. Почему нет set требуемый, хотя? :-/ –   30.06.2011, 23:43

Ваш сценарий является неправильным, потому что

egrep "^username" /etc/passwd >/dev/null 
if[ $? -eq 0 ] 
then 
  #echo "doesn't exist" # WRONG
  echo "the USER EXISTS"
fi

статус выхода 0 - средний - все в порядке, в случае grep, среднего "хорошо, нашел строку". статус выхода! = 0 средних, что-то неправильно, в случае среднего grep 1, "не найденный", 2 средних "не могут открыть вход"...

1
27.01.2020, 19:36

Теги

Похожие вопросы