TGStat
TGStat
Qidiruv uchun matnni kiriting
Ilg‘or kanal qidiruvi
  • flag Uzbek
    Sayt tili
    flag Russian flag English flag Uzbek
  • Saytga kirish
  • Katalog
    Kanal va guruhlar katalogi Hududiy to‘plamlar Tematik to‘plamlar Платные каналы Kanallar qidiruvi
    Kanal/guruh qo‘shish
  • Reytinglar
    Kanallar reytingi Guruhlar reytingi Postlar reytingi
    Brendlar va shaxslar reytingi
  • Analitika
  • Postlarda qidiruv
  • Telegram'ni kuzatish
  • Targ‘ibot
    Yandex Business orqali reklama Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
BashTex | Linux

19 Aug, 12:10

Telegram'da ochish Ulashish Shikoyat qilish

$? после &&, || и if: почему код возврата Bash бывает неочевидным

В Bash $? содержит код завершения последней выполненной команды. Но конструкции &&, || и if меняют то, какие команды вообще выполняются.

▪️Простая цепочка

false && echo "OK"
echo $?

echo после && не запускается, потому что false вернула 1.
Итоговый $? - 1.

А здесь:

true && echo "OK"
echo $?

последней командой становится echo "OK", поэтому $? уже равен 0.

▪️С || ситуация аналогичная

false || echo "fallback"
echo $?

false запускается, затем выполняется echo, потому что первая команда завершилась ошибкой.

В итоге $? будет 0 - код echo, а не false.

Если нужен исходный результат:

false
status=$?

if [ "$status" -ne 0 ]; then
echo "Command failed: $status"
fi

▪️Почему if не создаёт обычный 1

if false; then
echo "success"
fi

echo $?

Здесь if возвращает статус последней выполненной команды в выбранной ветке. Если ни одна ветка не выполнялась, результатом становится код проверки условия.

▪️Частая ошибка

command || echo "failed"
status=$?

status здесь содержит результат echo, а не command.

Если важно сохранить код ошибки:

if ! command; then
status=$?
fi

Но здесь есть ещё один нюанс: ! инвертирует статус, поэтому для получения исходного кода лучше сохранять его непосредственно после команды.

Например:

command
status=$?

if [ "$status" -ne 0 ]; then
echo "failed: $status"
fi

▪️Почему это важно

В сложных Bash-скриптах $? легко прочитать слишком поздно. Любая следующая команда - даже echo, printf или test - может заменить предыдущий код возврата.

Поэтому если результат команды важен, сохраняйте его сразу.

BashTex 📱 #bash #linux

346 0 16 6
Katalog
Kanal va guruhlar katalogi Kanallar to‘plamlari Kanallar qidiruvi Kanal/guruh qo‘shish
Reytinglar
Telegram-kanallar reytingi Telegram-guruhlar reytingi Postlar reytingi Brendlar va shaxslar reytingi
API
Statistika API'si Postlar qidiruvi API'si API Callback
Kanallarimiz
@TGStat @TGStat_Chat @telepulse @TGStatAPI
O‘qish
Академия TGStat Telegram tadqiqoti 2019 Telegram tadqiqoti 2021 Telegram tadqiqoti 2023
Kontaktlar
Справочный центр Qo‘llab-quvvatlash Email Vakansiyalar
Har xil narsalar
Foydalanuvchi shartnomasi Maxfiylik siyosati Ommaviy oferta
Botlarimiz
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot