Существует модуль optcomplete, который позволяет Вам писать завершение для автозавершения удара в Вашей программе Python. Это очень полезно в сочетании с optparse. Вы только определяете свои аргументы однажды, добавляете следующее к Вашему .bashrc
complete -F _optcomplete
, и все Ваши опции будут автоматически заполнены.
Я встретился с точкой (не 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...
!
Развитие @Bruno Bronosky и @mrteatime, я предлагаю предложение, чтобы Вы просто записали свой булев возврат "назад". Это - то, что я имею в виду:
foo()
{
if [ "$1" == "bar" ]; then
true; return
else
false; return
fi;
}
, Который устраняет ужасные два требования строки для каждого оператора возврата.
Используйте 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