2016-12-09 4 views
0

Я хочу сравнить код выхода программы с аргументом. Это то, что я делаю:Что здесь не так? (Сравнение кода выхода)

CODE=$1 
if [[ $(./program) -eq $CODE ]]; then 
    echo "same" 
else 
    echo "different" 
fi 

Где $1 получает "1". Но я получаю сообщение об ошибке. Что здесь не так?

+0

Что ошибка? Попробуйте ./program –

+3

Вы не сравниваете код выхода, вы просто сравниваете вывод из 'program' – anubhava

+2

. Помимо этого: используйте имена нижнего регистра для ваших собственных переменных - имена переменных со значением для оболочки или операционной системы имеют all- имена кепок, поэтому, используя имена all-caps самостоятельно, вы рискуете переписать их по ошибке (особенно, поскольку установка переменной оболочки будет перезаписывать любую переменную среды с похожими именами). См. [Соответствующий стандарт] (http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html). –

ответ

5

Вы не сравниваете код выхода; вы сравниваете стандартный вывод программы с $CODE.

Может быть:

CODE="$1" 
./program 
rc=$? 
if [[ "$rc" -eq "$CODE" ]] 
then echo "same" 
else echo "different" 
fi 

Вы могли бы просто использовать $? в состоянии, но вы можете его отчетности и проверки:

CODE="$1" 
./program 
rc=$? 
if [[ "$rc" -eq "$CODE" ]] 
then echo "same ($rc and $CODE)" 
else echo "different (got $rc, wanted $CODE)" 
fi 
+0

Что делать, если мне также нужно играть с выходом программы? Просто выполните дважды? Как вы показали мне, а также 'res = $ (./ program)'? –

+1

@UFCInsider, 'program_output = $ (./ program); program_rc = $? ' –

+0

Хорошо, понял. Благодаря! –