@b0rk If you're covering bash, there are also some other interesting syntax to consider, such as "cat <<<string" and "<(command)", which is not a redirect at all (but incredibly useful, I tend to compare commits using "meld <(git show A) <(git show B)"). There is a corresponding ">(cmd)" syntax that I haven't quite understood myself yet.
And there is also the confusing case of "sudo ls > foo.txt" which is a bit confusing as to which user it is that writes to foo.txt (use "sudo tee" to write as super-user).