Я должен был сделать это недавно и получил следующее решение:
while true; do
wait -n || {
code="$?"
([[ $code = "127" ]] && exit 0 || exit "$code")
break
}
done;
Вот как это работает:
wait -n
завершается, как только один из ( потенциально много) фоновые задания завершаются. Он всегда оценивает значение true, и цикл продолжается до:
127
: последнее фоновое задание успешно завершено. В этом случае мы игнорируем код выхода и выходим из под-оболочки с кодом 0. С помощью set -e
это гарантирует, что сценарий закончится раньше и пройдет через код выхода любого неудачного фонового задания.
Как уже говорили другие, это новый синтаксис для создания функций.
Однако, этот тип функций отличается от обычных:
Они связывают значение this
. Как объяснено в в спецификации ,
Функция ArrowFunction не определяет локальные привязки для
arguments
,super
,this
илиnew.target
. Любая ссылка наarguments
,super
,this
илиnew.target
в ArrowFunction должна разрешать привязку в лексической среде. Обычно это будет функциональная среда непосредственно включающей функции.Даже если ArrowFunction может содержать ссылки на
super
, функциональный объект, созданный на шаге 4, не превращается в метод при выполнении MakeMethod . ArrowFunction , которая ссылается наsuper
, всегда содержится в не ArrowFunction , а необходимое состояние для реализацииsuper
доступно через область , которая захвачена функциональным объектом функции ArrowFunction .
Они не являются конструкторами.
Это означает, что они не имеют [[Construct]] внутреннего метода и, следовательно, не могут быть созданы, например,
var f = a => a;
f(123); // 123
new f(); // TypeError: f is not a constructor
Как другие заявили, регулярное (традиционное) использование функций this
от объекта, который вызвал функцию, (например, кнопка, которая была нажата) . Вместо этого стрелка функционирует использование this
от объекта, который определяет функцию.
Рассматривают две почти идентичных функции:
regular = function() {
' Identical Part Here;
}
arrow = () => {
' Identical Part Here;
}
отрывок ниже демонстрирует принципиальное различие между тем, что this
представляет для каждой функции. выводы регулярной функции [object HTMLButtonElement]
, тогда как функция стрелки выводы [object Window]
.
<html>
<button id="btn1">Regular: `this` comes from "this button"</button>
<br><br>
<button id="btn2">Arrow: `this` comes from object that defines the function</button>
<p id="res"/>
<script>
regular = function() {
document.getElementById("res").innerHTML = this;
}
arrow = () => {
document.getElementById("res").innerHTML = this;
}
document.getElementById("btn1").addEventListener("click", regular);
document.getElementById("btn2").addEventListener("click", arrow);
</script>
</html>