| 1 | // empty lines are preserved |
| 2 | |
| 3 | // double-wrapped at-sigils work like single-wrapped |
| 4 | @@STRING@@ |
| 5 | @${STRING}@ |
| 6 | |
| 7 | // at-var lookup happens inside dollar-curly before dollar-curly lookup |
| 8 | ${@STRING_PROXY@} |
| 9 | |
| 10 | // expanded variables are treated as strings and can be re-substituted |
| 11 | @STRING_AT@ |
| 12 | ${STRING_AT} |
| 13 | $@STRING_CURLY@ |
| 14 | $${STRING_CURLY} |
| 15 | ${STRING_VAR} |
| 16 | @STRING_VAR@ |
| 17 | ${DOLLAR}{${STRING}} |
| 18 | @DOLLAR@{${STRING}} |
| 19 | @DOLLAR@{@STRING@} |
| 20 | |
| 21 | // nested dollar-curly expansion from the inside out |
| 22 | ${STRING${UNDERSCORE}PROXY} |
| 23 | ${STRING@UNDERSCORE@PROXY} |
| 24 | |
| 25 | // nested dollar-curly — only completed brace blocks are expanded |
| 26 | ${NEST${UNDERSCORE}PROXY} |
| 27 | ${NEST${${NEST_UNDERSCORE${UNDERSCORE}PROXY}}PROXY} |
| 28 | |
| 29 | // backslash is invalid in at-var names — preserved as literal |
| 30 | \@STRING\@ |
| 31 | |
| 32 | // backslash does not affect dollar-curly expansion |
| 33 | \${STRING} |
| 34 | |
| 35 | // backslash before opening brace breaks dollar-curly identification |
| 36 | $\{STRING} |
| 37 | |
| 38 | // bare at-sigils pass through unchanged with no variable map |
| 39 | #define AT @ |
| 40 | #define ATAT @@ |
| 41 | #define ATATAT @@@ |
| 42 | #define ATATATAT @@@@ |