Em bashtoda variável há essencialmente uma string (ou uma matriz ou uma função, mas vamos falar sobre variáveis regulares aqui).
As condições são analisadas com base nos valores de retorno dos comandos de teste - o valor de retorno não é uma variável, é um estado de saída. Quando você avalia if [ ... ]ou if [[ ]]ou if grep somethingalgo assim, o valor de retorno 0 (não a cadeia 0, mas o status de saída 0 = sucesso) significa verdadeiro e o restante significa falso (portanto, exatamente o oposto do que você está acostumado nas linguagens de programação compiladas, mas como há uma maneira de obter sucesso e muitas maneiras de falhar, e o resultado esperado da execução geralmente é bem-sucedido, 0 é usado como o resultado padrão mais comum se nada der errado). Isso é muito útil porque qualquer binário pode ser usado como teste - se falhar, é falso, caso contrário, é verdade.
truee falseprogramas (geralmente substituídos por componentes internos) são apenas pequenos programas úteis que não fazem nada - trueconseguem não fazer nada e sai com 0, enquanto falsetentam não fazer nada e "falham", saindo com 1. Parece inútil, mas é muito útil para scripts.
Quanto a como divulgar a verdade, depende de você. É bastante comum usar apenas "y" ou "yes" como verdade e uso if [ x"$variable" = x"yes" ](anexada a string fictícia xporque, se tiver $variablecomprimento zero, isso protege contra a criação de um comando falso if [ = "yes" ]que não analisa). Também pode ser útil simplesmente usar uma string vazia para false e [ -z "$variable ]testar se o comprimento é zero (ou -nnão é zero).
De qualquer forma, é muito raro precisar transmitir valores booleanos bash- é muito mais comum simplesmente exitfalhar ou retornar um resultado útil (ou zero se algo der errado e testar a cadeia vazia), e a maioria dos casos pode teste a falha diretamente do status de saída.
No seu caso, você deseja uma função que atue como qualquer outro comando (portanto, retorne 0 em caso de sucesso); portanto, sua última opção parece a escolha certa.
Além disso, você pode nem precisar de returninstruções. Se a função for simples o suficiente, você poderá usar o fato de simplesmente retornar o status do último comando executado na função. Portanto, sua função pode ser simplesmente
drive_xyz_available() {
[ -e /dev/disk/by-uuid/whatever ]
}
se você estiver testando a existência de um nó de dispositivo (ou grep /proc/mountspara verificar se ele está montado?).
help true ; help false ; help exit