>& filename(as opposed to
>& fd) is undefined.
Note: ShellCheck 0.8.0 and below would trigger this warning on the perfectly POSIX compatible construct
>& fd. If you are using
>& to copy an integer file descriptor, please ignore this warning.
# Writing to a filename mycommand >& log.txt
mycommand > log.txt 2>&1
The following construct is also fine, as it uses an integer file descriptor instead of a filename:
fd=3 mycommand >& $fd
There are two forms of the
>& file descriptor operator:
>& integersuch as
>& 3is a POSIX compatible synonym for
>& filenamesuch as
>& log.txtis a Bash specific synonym for
> log.txt 2>&1
If (and only if) you are using the latter form, write it out as shown in the correct example to ensure portability.
ShellCheck 0.8.0 and below incorrectly emits this warning for constructs like
>& $var, even though this would be POSIX compatible when
$var is an integer. In such cases, please ignore this warning.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.