support Command Substitution, but still bugy