Как объявить и использовать логические переменные в сценарии оболочки?

Вы можете дать код ниже,

public void multiArrayCopy(int[][] source,int[][] destination){
destination=source.clone();}

Надеюсь, что он работает.

803
задан Community 6 August 2014 в 23:01
поделиться

5 ответов

Исправленный ответ (12 февраля 2014 г.)

the_world_is_flat=true
# ...do something interesting...
if [ "$the_world_is_flat" = true ] ; then
    echo 'Be careful not to fall off!'
fi

Исходный ответ

Предостережения: https://stackoverflow.com/a/21210966/89391

the_world_is_flat=true
# ...do something interesting...
if $the_world_is_flat ; then
    echo 'Be careful not to fall off!'
fi

От: Использование логических переменных в Bash

Причина, по которой здесь включен исходный ответ, заключается в том, что комментарии до исправления от 12 февраля 2014 г. относятся только к исходному ответу, а многие из комментариев неверны, если связаны с исправленным ответом. . Например, комментарий Денниса Уильямсона о bash builtin true от 2 июня 2010 г. применим только к исходному ответу, а не к исправленному.

1093
ответ дан 22 November 2019 в 21:06
поделиться

Можно использовать GFlags: https://gflags.github.io/gflags /

Это дает Вам опцию определить: DEFINE_bool

Пример:

DEFINE_bool(big_menu, true, "Include 'advanced' options in the menu listing");

Из командной строки можно определить:

sh script.sh --bigmenu
sh script.sh --nobigmenu # False
0
ответ дан user260826 29 August 2019 в 16:49
поделиться

Это - тест скорости о различных способах протестировать "булевы" значения в Bash:

#!/bin/bash
rounds=100000

b=true # for true; b=false for false
type -a true
time for i in $(seq $rounds); do command $b; done 
time for i in $(seq $rounds); do $b; done 
time for i in $(seq $rounds); do [ "$b" == true ]; done
time for i in $(seq $rounds); do test "$b" == true; done
time for i in $(seq $rounds); do [[ $b == true ]]; done

b=x; # or any non-null string for true; b='' for false
time for i in $(seq $rounds); do [ "$b" ]; done 
time for i in $(seq $rounds); do [[ $b ]]; done

b=1 # or any non-zero integer for true; b=0 for false
time for i in $(seq $rounds); do ((b)); done

Это распечатало бы что-то как

true is a shell builtin
true is /bin/true

real    0m0,815s
user    0m0,767s
sys     0m0,029s

real    0m0,562s
user    0m0,509s
sys     0m0,022s

real    0m0,829s
user    0m0,782s
sys     0m0,008s

real    0m0,782s
user    0m0,730s
sys     0m0,015s

real    0m0,402s
user    0m0,391s
sys     0m0,006s

real    0m0,668s
user    0m0,633s
sys     0m0,008s

real    0m0,344s
user    0m0,311s
sys     0m0,016s

real    0m0,367s
user    0m0,347s
sys     0m0,017s
0
ответ дан 22 November 2019 в 21:06
поделиться

Альтернатива - использует функцию

is_ok(){ :;}
is_ok(){ return 1;}
is_ok && echo "It's OK" || echo "Something's wrong"

, Определение функции менее интуитивно, но проверка ее возвращаемого значения очень легка.

-1
ответ дан 22 November 2019 в 21:06
поделиться

Относительно синтаксиса это - простая методология, к которой я использую (примером) последовательно и нормально управляю Булевой логикой:

# tests
var=
var=''
var=""
var=0
var=1
var="abc"
var=abc

if [[ -n "${var}" ]] ; then
    echo 'true'
fi
if [[ -z "${var}" ]] ; then
    echo 'false'
fi

# results
# var=        # false
# var=''      # false
# var=""      # false
# var=0       # true
# var=1       # true
# var="abc"   # true
# var=abc     # true

, Если переменная никогда не объявляется ответом: # false

Так, простой способ установить переменную на истинный (использующий эту методологию синтаксиса) был бы, var=1; с другой стороны, var=''.

Ссылка:

-n = Верный, если длина строки var является ненулевой.

-z = Верный, если длина строки var является нулем.

0
ответ дан 22 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

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