2011-01-28 6 views
3

Я немного смущен этим сценарием KornShell (ksh), который я пишу, в основном с булевыми и условными выражениями.KornShell Boolean Условная логика

Так первая часть моего сценария у меня есть catme и wcme как набор либо true или false. Эта часть работает нормально, так как я пробовал их, и они дают ожидаемые результаты. В дальнейшем, у меня есть этот код:

if [[ $catme ]] ; then 
    some commands 
fi 

И я повторяю это с wcme. Однако, неожиданно, независимо от того, что wcme и catme, команды внутри моего оператора if выполнены.

Является ли это синтаксической ошибкой? Я пробовал [[ $catme -eq true ]], но это тоже не работает. Может ли кто-нибудь указать мне в правильном направлении?

ответ

8

test и [ - это то же самое. Вы должны избавиться от команды test от вашего если заявления, так что это будет выглядеть следующим образом:

if $catme; then 
    some commands 
fi 

Тип man test, чтобы получить больше информации.

Например:

$ v=true 
$ $v 
$ if $v; then 
> echo "PRINTED" 
> fi 
PRINTED 

$ v=false 
$ if $v; then 
> echo "PRINTED" 
> fi 
$ 
+0

Это работало спасибо! Примут через 4 минуты :) – Fred

0

Попробуйте [[ $catme == true ]] вместо этого.

Или еще лучше, ответ gahooa довольно хорош.

3

Вы также можете попробовать метод проб и ошибок:

if [[ true ]]; then echo +true; else echo -false; fi 
+true 
if [[ false ]]; then echo +true; else echo -false; fi 
+true 
if [[ 0 ]]; then echo +true; else echo -false; fi 
+true 
if [[ -1 ]]; then echo +true; else echo -false; fi 
+true 
if ((-1)); then echo +true; else echo -false; fi 
+true 
if ((0)); then echo +true; else echo -false; fi 
-false 
if ((1)); then echo +true; else echo -false; fi 
+true 
if [[ true == false ]]; then echo +true; else echo -false; fi 
-false 
if [[ true == true ]]; then echo +true; else echo -false; fi 
+true 
if true; then echo +true; else echo -false; fi 
+true 
if false; then echo +true; else echo -false; fi 
-false 
Смежные вопросы