in packages/shell-parser/src/parser.ts [277:311]
function childAtIndex(
str: string,
index: number,
inString: boolean,
terminators: string[],
): LiteralNode | null {
const lookahead = [
str.charAt(index),
str.charAt(index + 1),
str.charAt(index + 2),
];
switch (lookahead[0]) {
case "$":
if (lookahead[1] === "(") {
return lookahead[2] === "("
? parseArithmeticExpansion(str, index)
: parseCommandSubstitution(str, index, ")");
}
if (lookahead[1] === "{") {
return parseExpansion(str, index);
}
if (!inString && lookahead[1] === "'") {
return parseAnsiCString(str, index);
}
return parseSimpleExpansion(str, index, terminators);
case "`":
return parseCommandSubstitution(str, index, "`");
case "'":
return inString ? null : parseRawString(str, index);
case '"':
return inString ? null : parseString(str, index);
default:
return null;
}
}