true
в bash — это не ключевое слово, это программа, которая мгновенно завершает работу с успешным кодом выхода. Точно так же false
— это программа, которая завершается с неудачным кодом выхода.
Вы можете попробовать это, запустив обе программы с вашего терминала, а затем прочитав переменную $?
, которая содержит код выхода последней программы;
true
echo $? # 0
false
echo $? #1
if sudo true
не эквивалентно if sudo == true
. if sudo true
запускает программу true
, используя sudo
, и проверяет код выхода.
Поэтому:
if sudo false; then
запускает программу false
как sudo. Возврат всегда будет ложным.
if sudo true == false
запустит программу true
с аргументами ==
и false
, используя sudo
. Это явно не то, чего вы хотели.
if [!(sudo true)]
недопустимый синтаксис.
Вероятно, вы ищете
if ! sudo true;