Попытка понять возвращаемые значения функции bash - PullRequest
1 голос
/ 29 апреля 2019

Я посмотрел на возвращаемые значения функции bash и, похоже, до сих пор не понимаю, как это работает.Я установил 3 функции, каждая из которых якобы возвращает возвращаемое значение RET_VAL.Я предполагаю, что func_1 возвращает либо 1, либо 0 на основе оператора if. Я предполагаю, что func_2 возвращает либо 1, либо 0 на основе оператора if.

func_1() {
  RET_VAL=0
  if [ -d /tmp/dir ]; then
    echo "Dir exists" 
    RET_VAL=0
  else
    echo "Dir doesn't exist"
    RET_VAL=1
  fi
  return ${RET_VAL}
}

func_2() {
  RET_VAL=0
  if func_1; then
    if [ -f /tmp/file_1]; then
      echo "File exists"
    else
      echo "File doesn't exist"
      RET_VAL=1
    fi
  else
    RET_VAL=1
  fi
  return ${RET_VAL}
}

func_3() {
  if func_2; then
    echo "Dir and File do exist"
  else
    echo "Dir and file do not exist"
  fi
}

Верны ли мои предположения или каждая функция возвращает то, что она выполнила в последний раз, например, оператор echo?Если да, как я могу убедиться, что функции возвращают значение 1 или 0?

Cheers, Roland

1 Ответ

2 голосов
/ 29 апреля 2019

func_3 не будет печатать возвращаемое значение func_2. Оператор if будет использовать состояние выхода func_2, чтобы определить, какую ветвь выбрать. Каждая команда имеет статус выхода, поэтому при отсутствии явной команды return статус выхода последней команды, которая будет выполнена, будет статусом выхода функции. В случае func_3 статусом выхода будет состояние выхода любой выполняемой команды echo (которая практически всегда равна 0, при отсутствии ошибок ввода / вывода).

...