mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 01:37:35 +00:00
Shell: Add support for 'immediate' expressions as variable substitutions
This commit adds a few basic variable substitution operations: - length Find the length of a string or a list - length_across Find the lengths of things inside a list - remove_{suffix,prefix} Remove a suffix or a prefix from all the passed values - regex_replace Replace all matches of a given regex with a given template - split Split the given string with the given delimiter (or to its code points if the delimiter is empty) - concat_lists concatenates any given lists into one Closes #4316 (the ancient version of this same feature)
This commit is contained in:
parent
a303b69caa
commit
a45b2ea6fb
16 changed files with 911 additions and 37 deletions
|
@ -98,6 +98,7 @@ private:
|
|||
RefPtr<AST::Node> parse_glob();
|
||||
RefPtr<AST::Node> parse_brace_expansion();
|
||||
RefPtr<AST::Node> parse_brace_expansion_spec();
|
||||
RefPtr<AST::Node> parse_immediate_expression();
|
||||
|
||||
template<typename A, typename... Args>
|
||||
NonnullRefPtr<A> create(Args... args);
|
||||
|
@ -238,6 +239,7 @@ list_expression :: ' '* expression (' '+ list_expression)?
|
|||
expression :: evaluate expression?
|
||||
| string_composite expression?
|
||||
| comment expression?
|
||||
| immediate_expression expression?
|
||||
| history_designator expression?
|
||||
| '(' list_expression ')' expression?
|
||||
|
||||
|
@ -268,6 +270,10 @@ variable :: '$' identifier
|
|||
|
||||
comment :: '#' [^\n]*
|
||||
|
||||
immediate_expression :: '$' '{' immediate_function expression* '}'
|
||||
|
||||
immediate_function :: identifier { predetermined list of names, see Shell.h:ENUMERATE_SHELL_IMMEDIATE_FUNCTIONS }
|
||||
|
||||
history_designator :: '!' event_selector (':' word_selector_composite)?
|
||||
|
||||
event_selector :: '!' {== '-0'}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue