Closed hiroin closed 4 years ago
事案 bashは、変数設定時、=の後に空白があると、変数は無視され、空白以降をコマンドとして認識する
miishellのver b7c97115eb72737ad38705c3a811e143ec850022
事案詳細
(1) bashは、変数設定時、=の後に空白があると、変数は無視され、空白以降をコマンドとして認識する。 (2) 変数になにか値が設定されていた場合は、その設定を保持する。
再現手順 [bash]
$ testenv1=a $ echo testenv1 a $ testenv1= pwd /home/user42/42/minishell/minishell $ echo $testenv1 a
[minishell]
minishell$ testenv1=a minishell$ echo $testenv1 a minishell$ testenv1= pwd minishell$ echo $testenv1
所見 変数の設定の際は=の前後に空白が入ってはいけないことになっています。 bashは空白が入っていた場合に文法エラーにならずに空白以降をなぜかコマンドとして認識して実行します。 そして変数の設定はなかったことになるので、もともと設定されていた値は保持します。 コマンドとして認識して実行するのはさておき、=の後に空白が入っていた場合は、文法エラーなので、値を空文字にら設定するのではなく保持するのは妥当な動作かな…と思いました。
修正しました
すごい! 修正を確認しました。 難しいと思ったのですが、ソース見ていないから感覚掴めなかったです。
事案 bashは、変数設定時、=の後に空白があると、変数は無視され、空白以降をコマンドとして認識する
miishellのver b7c97115eb72737ad38705c3a811e143ec850022
事案詳細
(1) bashは、変数設定時、=の後に空白があると、変数は無視され、空白以降をコマンドとして認識する。 (2) 変数になにか値が設定されていた場合は、その設定を保持する。
再現手順 [bash]
[minishell]
所見 変数の設定の際は=の前後に空白が入ってはいけないことになっています。 bashは空白が入っていた場合に文法エラーにならずに空白以降をなぜかコマンドとして認識して実行します。 そして変数の設定はなかったことになるので、もともと設定されていた値は保持します。 コマンドとして認識して実行するのはさておき、=の後に空白が入っていた場合は、文法エラーなので、値を空文字にら設定するのではなく保持するのは妥当な動作かな…と思いました。