割り当て後にリダイレクトが機能しないのはなぜですか?

割り当て後にリダイレクトが機能しないのはなぜですか?

./NulFileNULを含みます。コマンド拡張は、NULを削除すると警告を出力します。警告を抑制する方法はありますか?

リダイレクトが機能しないのはなぜですか?

$ filecontent="$(cat ./NulFile)" 1>/dev/null 2>&1
bash: warning: command substitution: ignored null byte in input

答え1

コマンドグループに入れて、そのグループの出力をリダイレクトします。

$ foo=$(cat /bin/sleep)
bash: warning: command substitution: ignored null byte in input
$ { foo=$(cat /bin/sleep); } 2>/dev/null
$

{ ...; }サブシェルではないため、変数は引き続き使用できます。

$ echo ${#foo}
19786

警告はシェルで発生するため、これを機能させるにはシェルの出力をリダイレクトする必要があります。グループ内では、シェルの出力もリダイレクトされます(グループ内のみ)。

関連情報