Возвращение логического значения из функции Bash

Существует модуль optcomplete, который позволяет Вам писать завершение для автозавершения удара в Вашей программе Python. Это очень полезно в сочетании с optparse. Вы только определяете свои аргументы однажды, добавляете следующее к Вашему .bashrc

complete -F _optcomplete 

, и все Ваши опции будут автоматически заполнены.

186
задан Vadim Kotov 9 November 2017 в 07:13
поделиться

3 ответа

Я встретился с точкой (не explictly уже упомянутый?), который я спотыкался. Таким образом, не, как к [1 117] возврат булевская переменная, а скорее как правильно оценить его!

я пытался сказать if [ myfunc ]; then ..., но это просто неправильно. Вы не должны использовать скобки! if myfunc; then ... способ сделать это.

Как в @Bruno и других повторил, true и false команды , не значения! Это очень важно для понимания булевских переменных в сценариях оболочки.

В этом сообщении, я объяснил и продемонстрировал булевскую переменную использования переменные : https://stackoverflow.com/a/55174008/3220983. Я настоятельно рекомендую проверить это, потому что это настолько тесно связано.

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

Это:

test(){ false; }                                               
if test; then echo "it is"; fi                                 

Не Производит вывода эха. (т.е. false возвраты ложь)

test(){ true; }                                                
if test; then echo "it is"; fi                                 

Производит:

it is                                                        

(т.е. true возвраты верный)

И

test(){ x=1; }                                                
if test; then echo "it is"; fi                                 

Производит:

it is                                                                           

, поскольку 0 (т.е. верный) был возвращен неявно .

Теперь, это - то, что завинчивало меня...

test(){ true; }                                                
if [ test ]; then echo "it is"; fi                             

Производит:

it is                                                                           

И

test(){ false; }                                                
if [ test ]; then echo "it is"; fi                             

ТАКЖЕ производит:

it is                                                                           

Используя скобки здесь произвел ложь, положительная ! (Я вывожу "внешний" результат команды, 0.)

майор устраняет из моего сообщения: не используют скобки для оценки булевой функции (или переменная) как Вы был бы для типичной проверки равенства, например, if [ x -eq 1 ]; then...!

0
ответ дан 23 November 2019 в 05:49
поделиться

Развитие @Bruno Bronosky и @mrteatime, я предлагаю предложение, чтобы Вы просто записали свой булев возврат "назад". Это - то, что я имею в виду:

foo()
{
    if [ "$1" == "bar" ]; then
        true; return
    else
        false; return
    fi;
}

, Который устраняет ужасные два требования строки для каждого оператора возврата.

0
ответ дан 23 November 2019 в 05:49
поделиться

Используйте true или false команды сразу перед Вашим return, затем return без параметров. Эти return будет автоматически использовать значение Вашей последней команды.

Обеспечение аргументов return непоследовательно, введите конкретный и подверженный ошибке, если Вы не используете 1 или 0. И поскольку предыдущие комментарии указали, с помощью 1 или 0 вот не правильного способа приблизиться к этой функции.

#!/bin/bash

function test_for_cat {
    if [ $1 = "cat" ];
    then
        true
        return
    else
        false
        return
    fi
}

for i in cat hat;
do
    echo "${i}:"
    if test_for_cat "${i}";
    then
        echo "- True"
    else
        echo "- False"
    fi
done

Вывод:

$ bash bash_return.sh

cat:
- True
hat:
- False
2
ответ дан 23 November 2019 в 05:49
поделиться