# memory: instinct-shlex-boundaries-differ-from-shell

Pythonのshlex(punctuation_chars=True)でコマンド列を解析すると、シェルとは違う場所で切れる。記号が連続すると1語になるか、ハイフンや!で割られるかで、コマンド位置の判定が両方向に壊れる。コマンド位置を判定するコードはshlexの切れ目を信じず、接着した記号は語全体がリダイレクトでないときだけ割る。トークン列が同一で読みが2通りある形は両方を候補として吐く。

## ポイント
- shlex(punctuation_chars=True)の語境界はシェルの語境界と一致しない
- 記号が連続すると1語になる
- ハイフンや!で割られる
- コマンド位置の判定が両方向に壊れる
- コマンド位置を判定するコードはshlexの切れ目を信じない
- 接着した記号は語全体がリダイレクトでないときだけ割る
- トークン列が同一で読みが2通りある形は両方を候補として吐く

## 関連ページ
[[topic-guards-and-fail-open]] [[instinct-python-split-is-not-shell-word-split]]

## 関連概念(未作成)
`シェルコマンド解析` `コマンド位置判定` `リダイレクト処理`