特定の文字列をぶら下げ[,[[

特定の文字列をぶら下げ[,[[

しかし、ファズテスト私はこれが可能であることを次のように定義することで見つけました。

var=$'\365\\'

次の2つのコマンドを実行します(最後の改行文字の前のすべての項目を削除するには)。CPUを100%使用して無期限に中断Bash 4.2.25(1)-リリース(x86_64-pc-linux-gnu):

[ -n "${var##*$'\n'}" ]
[[ -n "${var##*$'\n'}" ]]

ランアウェイプロセスは(-または)またはをbash使用して中断することはできませんが、終了するにはを使用する必要があります。SIGINTCtrlCkill -SIGINT $pidSIGTERMSIGKILL

私は以下を使用して値を確認しようとしました。

uniname -bcp <<<"$var"

しかし、これも空中に浮かんでいます。uninameしかし、殺すことはできますSIGINT

また、他のいくつかの基本的なコマンドも確認しましたが、すべてうまくいきます。

echo "$var"
printf '%q\n' "$var"
touch -- "$var"
rm -- "$var"

ここで何が起こっているのでしょうか?これは他の人によって複製できますか?これが定義された動作ですか?

答え1

bash-4.2これは、無効なUTF-8文字を含む文字列のグロービングに関連するUTF-8ロケールのパッチ29のバグです\365\\

次のコマンドを使用して再現することもできます。

: *$'\365x'

この問題は以下で修正されました。パッチ30、パッチノートとメーリングリストの議論もっと学ぶ。

関連情報