2014-12-08 7 views
0

Я пытаюсь проверить, если количество аргументов в моем Баше скрипте превышает число 2, а выход с ненулевым статусом выхода, но я получаю следующее сообщение об ошибке:bash- Как проверить, превышает ли количество аргументов определенное число?

unexpected token `newline', conditional binary operator expected 

Это мое код:

if [[ #$ > 2 ]] 
then 
    echo "error" 1>&2 
    exit 1 
fi 

Это очень просто, но я не могу понять, почему я получаю эту ошибку. Я не должен использовать двойные скобки в выражении if?

+0

У вас есть опечатка; # $ должно быть $ #. Кроме того, я думаю, что для целочисленного сравнения это должно быть '-gt', not>. – Random832

+0

Если вы изменили '# $' на '$ #', ваш тест будет работать - попробуйте. Тем не менее, размещение Sputnick теста внутри арифметических операторов обеспечивает численный тест и будет работать. –

+0

Да, опечатка меня путала, тупая ошибка. Но я заметил, что это работает, если я использую двойные квадратные скобки или двойные круглые скобки, действительно ли имеет значение, что я использую? Я знаю, что круглые скобки предназначены для арифметических операторов, но этот фрагмент кода работает в обоих направлениях. – Bolboa

ответ

1
if (($# > 2)) 
then 
    echo "error" >&2 
    exit 1 
fi 

Проверить http://wiki.bash-hackers.org/syntax/arith_expr

Как greybot сказал на Irc: //irc.freenode.org/#bash: TLDP Баш руководство является устаревшим, а в некоторых случаях просто неправильно. Там причина не в теме

+0

О, я вижу ... глупая ошибка с моей стороны. Я отвечу на этот ответ за секунду, но если вы не возражаете, не могли бы вы рассказать мне, как я могу сделать ошибку эха только для stderr, а не для stdout. – Bolboa

0

Один из способов заключается в использовании arithmetic expansion:

if (($# > 2)) 
then 
    echo "error" 1>&2 
    exit 1 
fi 
+0

Прекратите давать плохие источники, чтобы изучить оболочку. TLDP не рекомендуется. Вместо этого см. «Bash faq» и «bash hackers». Как сказал greybot на irc: //irc.freenode.org/#bash _tldp bash guide устарел, а в некоторых случаях просто неправильно. Есть причина, по которой это не в теме_ –

+0

Не рекомендуется кем? –

+0

Лучше поместите http://wiki.bash-hackers.org/syntax/arith_expr ссылку –

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