I realized this later. That you can’t have different rules for different arguments because you need to tokenize the whole string using one set of rules.
So how about this instead? We just implement a cmd.exe compatible tokenizer, and then you have a setting like “setting set tokenizer [cmd/bash]”, and the default on windows is cmd, and the default otherwise is bash. Where the current implementation of Args::SetCommandString is considered the bash implementation.