Previous Entry Share Next Entry
Шелл — мой любимый язык программирования
Ĵonglado
zhtw
Все, кто хоть чуть-чуть программировал на шелле, знают о том, что будет, если забысть сделать в нужный момент set -ue, или хотя бы set -e.

Я знаю, что есть приемы написания кода, которые позволяют обойтись без set -e. Но они не универсальные и при постоянном использовании делают код не очень читабельным.

Так вот, мы с вами люди нормальные и мы никогда не забываем в первой строчке писать

#!/bin/sh -ue

(Можно и bash. Не люблю башистов, но на чистом posix-Шелле программировать действительно бывает неудобно.)

Мы также помним (мы же опытные программисты), что set -e отключается внутри условия if-then и умеем с этим жить.

Но оказывается и для нас с вами найдется супер-фича, от которой хочется ударить по лицу того, кто придумал этот замечательный язык программирования.

Как думаете, вернет ли ошибку вызов функции proc, если файл nonexistent не существует?


proc()
{
  x=$(cat nonexistent)
  ...
}


Да, вернет. Ну, хорошо, а если так?

proc()
{
  local x=$(cat nonexistent)
  ...
}



Объяснение, почему оно так, звучит вполне логично. Но это ж ничего не меняет. Ни один человек без заглядывания в документацию не сможет предсказать такого рода поведение.
Tags: ,

  • 1
Мне кажется, в нашем коде найдется немало мест, вызывающих схожие эмоции.

  • 1
?

Log in