Source: http://igm.univ-mlv.fr/~masson/Teaching/PIM-INF3/shell.pdf