У bashкожній змінній по суті є рядок (або масив або функція, але поговоримо тут про регулярні змінні).
Умови аналізуються на основі повернених значень тестових команд - повернене значення не є змінною, це вихідний стан. Коли ви оцінюєте if [ ... ]чи if [[ ]]або що- if grep somethingнебудь подібне, значення повернення 0 (не рядок 0, а статус виходу 0 = успіх) означає істинне, а решта означає помилкове (так, прямо протилежне тому, до чого ви звикли в складених мовах програмування, але оскільки існує один спосіб досягти успіху та багато способів невдачі, і очікуваний результат виконання зазвичай є успіхом, 0 використовується як найпоширеніший результат за замовчуванням, якщо нічого не виходить). Це дуже корисно, тому що будь-який двійковий файл може бути використаний як тест - якщо він не працює, він помилковий, інакше це правда.
trueі falseпрограми (як правило, переосмислені вбудованими) - це просто корисні маленькі програми, які нічого не роблять - trueвдається нічого не робити, і завершує роботу з 0, при falseцьому намагається нічого не робити і "провалюється", виходячи з 1. Звучить безглуздо, але це дуже зручно для сценаріїв.
Що стосується того, як передати правдивість навколо, то вирішувати вам. Досить звичайно просто використовувати "y" або "так" для правди і використовувати if [ x"$variable" = x"yes" ](додається рядок манекена, xтому що, якщо $variableтрапляється нульова довжина, це захищає від створення неправдивої команди, if [ = "yes" ]яка не розбирає). Також може бути корисним просто використовувати порожню рядок для помилкової та використовувати [ -z "$variable ]для перевірки, чи вона нульової довжини (або, -nщоб вона не була нульовою ).
У будь-якому випадку, насправді досить просто обходити булеві значення в bash- набагато частіше просто exitвідмовитися або повернути корисний результат (або нуль, якщо щось піде не так, і перевірити на порожню рядок), і більшість випадків можуть тест на вихід з ладу безпосередньо з вихідного статату.
У вашому випадку ви хочете функцію, яка буде діяти як будь-яка інша команда (тому поверніть 0 на успіх), тому ваш останній варіант здається правильним вибором.
Крім того, вам може навіть не знадобитися returnзаява. Якщо функція досить проста, ви можете використовувати той факт, що вона просто повертає статус останньої виконаної команди у функції. Тож ваша функція може бути просто
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
якщо ви перевіряєте наявність вузла пристрою (чи grep, /proc/mountsщоб перевірити, чи він встановлений?).
help true ; help false ; help exit