Внутри Баш [[…]]
(и внутри старых […]
в большинстве оболочек), что имеет значение, если значение испытания имеет несколько символов или нет:
$ [[ somevalue ]] && echo "yes" || echo "no"
Если значение испытанные если пусто, то тест не пройден :
$ [[ "" ]] && echo "yes" || echo "no"
no
это также верно и для переменных:
$ somevalue="a false string"
$ [[ $somevalue ]] && echo "yes" || echo "no"
yes
$ somevalue=""
$ [[ $somevalue ]] && echo "yes" || echo "no"
no
Таким образом, [[…]]
ограничивается тестированием строк, а не «кодами выхода».
Ваши функции определяют «коды выхода», а не строки.
Вы можете
определяют значения mytrue
и myfalse
быть переменными, которые представляют эти значения:
mytrue=A_True_Value
myfalse=""
И использовать их:
$ show="dont-show"
$ [[ ${SHOW} == "show" || $mytrue ]] && echo "ok" || echo "wrong"
ok
$ [[ ${SHOW} == "show" || $myfalse ]] && echo "ok" || echo "wrong"
wrong
Или, на самом деле тест выход коды за пределами [[…]]
идиома:
$ mytrue(){ return 0; }
$ if mytrue; then echo "ok"; else echo "wrong"; fi
ok
$ mytrue && echo "ok" || echo "wrong"
ok
Один (более сложный) альтернатива, чтобы сделать функции испускают значение и вызвать выполнение кода в функции от [[…]]
идиомы:
$ mytrue(){ echo "A_True_Value"; }
$ myfalse(){ echo ""; }
$ show="dont-show"
$ [[ ${SHOW} == "show" || $(mytrue) ]] && echo "ok" || echo "wrong"
ok
ПОЦЕЛУЯ
Но (возможно) наиболее простым решением является наилучшее решение:
myfalse=""
mytrue="true"
test-conditional() {
show="dont-show"
[[ ${show} == "show" || $mytrue ]] && echo "ok" || echo "wrong"
[[ ${show} == "show" && $mytrue ]] && echo "err" || echo "ok"
[[ ${show} == "show" || $myfalse ]] && echo "err" || echo "ok"
[[ ${show} == "show" && $myfalse ]] && echo "err" || echo "ok"
show="show"
[[ ${show} == "show" || $mytrue ]] && echo "ok" || echo "err"
[[ ${show} == "show" && $mytrue ]] && echo "ok" || echo "err"
[[ ${show} == "show" || $myfalse ]] && echo "ok" || echo "err"
[[ ${show} == "show" && $myfalse ]] && echo "err" || echo "ok"
}
test-conditional
У вас нет, просто снимите скобки. или включать только '==' сравнение внутри, т. е. [[$ {SHOW} == "show"]] || mytrue' – 123
Также 0 истинно в bash. – 123