**Describe the bug**
A clear and concise description of what works not as it is supposed to.

```
CREATE TABLE table_repl
(
    number UInt32
)
ENGINE = ReplicatedMergeTree("/clickhouse/{cluster}/tables/{shard}/table_repl", "{replica}")
PARTITION BY intDiv(number, 1000)
ORDER BY number
```

yields an Exception:

`DB::Exception: No macro 'uuid' in config while processing substitutions in '/clickhouse/tables/{uuid}/{shard}' at '20' or macro is not supported here.
`

**How to reproduce**
* Which ClickHouse server version to use: 20.9.1

**Expected**

The error is that the query should contain only single-quoted strings, but the message is quite misleading.
So the exception should be like "You're using double-quoted strings, which is prohibited".

if (arg_cnt < min_num_params || arg_cnt > max_num_params)
    {
        String msg;
        if (is_extended_storage_def)
            msg += "With extended storage definition syntax storage " + args.engine_name + " requires ";
        else
            msg += "Storage " + args.engine_name + " requires ";
        if (max_num_params)
        {
            if (min_num_params == max_num_params)
                msg += toString(min_num_params) + " parameters: ";
            else
                msg += toString(min_num_params) + " to " + toString(max_num_params) + " parameters: ";
            msg += needed_params;
        }
        else
            msg += "no parameters";
        msg += getMergeTreeVerboseHelp(is_extended_storage_def);
        throw Exception(msg, ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
    }
    
    String zookeeper_path;
    String replica_name;
    if (replicated)
    {
        bool has_arguments = arg_num + 2 <= arg_cnt && engine_args[arg_num]->as<ASTLiteral>() && engine_args[arg_num + 1]->as<ASTLiteral>();
        if (has_arguments)
        {
            const auto * ast = engine_args[arg_num]->as<ASTLiteral>();
            if (ast && ast->value.getType() == Field::Types::String)