2014-11-11 4 views
-2

Что означает следующая выделенная команда UNIX ???Что означает следующая команда UNIX?

grep -n "$string" $filename 
    if[$? -eq 0] #what does this command mean??? 
    then 
    echo "string is match" 
+1

введите точный код, который вы используете, не ставьте '**' все это, поскольку звезды означают что-то в сценарии оболочки! –

+0

у вас может быть дополнительное пространство –

+0

Можете ли вы проверить, что вы публикуете, поскольку я подозреваю, что вы имеете в виду '$?', А не '$?' –

ответ

0

Не пытайтесь сделать смелый код (вы можете это сделать, но это трудно:.. if [ $? -eq 0 ] и отступы не работает должным образом Просто поместите комментарий после строки if [ $? -eq 0 ] # What does this line mean? Вы должны добавить недостающее fi для полноты картины.

grep -n "$string" $filename
if[$? -eq 0] # What does this command mean?
then
                echo "string is matched"
fi

, который получают путем написания:

> `grep -n "$string" $filename` 
> **`if[$? -eq 0] # What does this command mean?`** 
> `then` 
>         `echo "string is matched"` 
> `fi` 

$? является статус выхода последней выполненной команды, что означает grep в этом контекст. 0 указывает на успех; любой ненулевой статус указывает на отказ какого-либо рода. В целом не существует стандарта для статусов выхода. POSIX законодательно устанавливает статус выхода для некоторых команд. Например, для grep, он говорит:

  • 0 - одна или несколько строк были выбраны.
  • 1 - линий не выбрано.
  • >1 - Произошла ошибка.

Как написано, ваш фрагмент кода означает «выполнить команду if[0 или if[1 с двумя аргументами, -eq и 0]. Это в основном бессмысленно, потому что вряд ли будут команды с этими именами.

Что, вероятно, написано использует пробелы - пробелы важны в оболочке в целом и команды испытания в частности:

if [ $? -eq 0 ] 

Это означает «испытание ли значение $? равно нулю (что означало бы, что grep казнены успешно).

Однако нет необходимости использовать команду тестирования. Сценарий может быть написан:

if grep -n "$string" "$filename" 
then 
    echo "string is matched" 
fi 

И если вы не хотите, чтобы увидеть выход из grep, просто получить статус, а затем использовать grep -q вместо grep -n.

Смежные вопросы