shells: expand TODO comments, no code changes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
68e980545a
commit
203fd7bc66
@ -6680,6 +6680,7 @@ subevalvar(char *p, char *varname, int strloc, int subtype,
|
|||||||
if (*loc++ == ':') {
|
if (*loc++ == ':') {
|
||||||
len = number(loc);
|
len = number(loc);
|
||||||
}
|
}
|
||||||
|
//TODO: number() chokes on "-n". In bash, LEN=-n means strlen()-n
|
||||||
}
|
}
|
||||||
if (pos < 0) {
|
if (pos < 0) {
|
||||||
/* ${VAR:$((-n)):l} starts n chars from the end */
|
/* ${VAR:$((-n)):l} starts n chars from the end */
|
||||||
|
35
shell/hush.c
35
shell/hush.c
@ -41,14 +41,29 @@
|
|||||||
*
|
*
|
||||||
* TODOs:
|
* TODOs:
|
||||||
* grep for "TODO" and fix (some of them are easy)
|
* grep for "TODO" and fix (some of them are easy)
|
||||||
* special variables (done: PWD, PPID, RANDOM)
|
|
||||||
* tilde expansion
|
|
||||||
* aliases
|
|
||||||
* follow IFS rules more precisely, including update semantics
|
|
||||||
* builtins mandated by standards we don't support:
|
|
||||||
* [un]alias, command, fc, getopts, newgrp, readonly, times
|
|
||||||
* make complex ${var%...} constructs support optional
|
* make complex ${var%...} constructs support optional
|
||||||
* make here documents optional
|
* make here documents optional
|
||||||
|
* special variables (done: PWD, PPID, RANDOM)
|
||||||
|
* follow IFS rules more precisely, including update semantics
|
||||||
|
* tilde expansion
|
||||||
|
* aliases
|
||||||
|
* builtins mandated by standards we don't support:
|
||||||
|
* [un]alias, command, fc, getopts, readonly, times:
|
||||||
|
* command -v CMD: print "/path/to/CMD"
|
||||||
|
* prints "CMD" for builtins
|
||||||
|
* prints "alias ALIAS='EXPANSION'" for aliases
|
||||||
|
* prints nothing and sets $? to 1 if not found
|
||||||
|
* command -V CMD: print "CMD is /path/CMD|a shell builtin|etc"
|
||||||
|
* command [-p] CMD: run CMD, even if a function CMD also exists
|
||||||
|
* (can use this to override standalone shell as well)
|
||||||
|
* -p: use default $PATH
|
||||||
|
* readonly VAR[=VAL]...: make VARs readonly
|
||||||
|
* readonly [-p]: list all such VARs (-p has no effect in bash)
|
||||||
|
* getopts: getopt() for shells
|
||||||
|
* times: print getrusage(SELF/CHILDREN).ru_utime/ru_stime
|
||||||
|
* fc -l[nr] [BEG] [END]: list range of commands in history
|
||||||
|
* fc [-e EDITOR] [BEG] [END]: edit/rerun range of commands
|
||||||
|
* fc -s [PAT=REP] [CMD]: rerun CMD, replacing PAT with REP
|
||||||
*
|
*
|
||||||
* Bash compat TODO:
|
* Bash compat TODO:
|
||||||
* redirection of stdout+stderr: &> and >&
|
* redirection of stdout+stderr: &> and >&
|
||||||
@ -64,8 +79,13 @@
|
|||||||
* The EXPR is evaluated according to ARITHMETIC EVALUATION.
|
* The EXPR is evaluated according to ARITHMETIC EVALUATION.
|
||||||
* This is exactly equivalent to let "EXPR".
|
* This is exactly equivalent to let "EXPR".
|
||||||
* $[EXPR]: synonym for $((EXPR))
|
* $[EXPR]: synonym for $((EXPR))
|
||||||
|
* indirect expansion: ${!VAR}
|
||||||
|
* substring op on @: ${@:n:m}
|
||||||
*
|
*
|
||||||
* Won't do:
|
* Won't do:
|
||||||
|
* Some builtins mandated by standards:
|
||||||
|
* newgrp [GRP]: not a builtin in bash but a suid binary
|
||||||
|
* which spawns a new shell with new group ID
|
||||||
* In bash, export builtin is special, its arguments are assignments
|
* In bash, export builtin is special, its arguments are assignments
|
||||||
* and therefore expansion of them should be "one-word" expansion:
|
* and therefore expansion of them should be "one-word" expansion:
|
||||||
* $ export i=`echo 'a b'` # export has one arg: "i=a b"
|
* $ export i=`echo 'a b'` # export has one arg: "i=a b"
|
||||||
@ -5703,7 +5723,7 @@ static NOINLINE const char *expand_one_var(char **to_be_freed_pp, char *arg, cha
|
|||||||
if (errmsg)
|
if (errmsg)
|
||||||
goto arith_err;
|
goto arith_err;
|
||||||
debug_printf_varexp("len:'%s'=%lld\n", exp_word, (long long)len);
|
debug_printf_varexp("len:'%s'=%lld\n", exp_word, (long long)len);
|
||||||
if (len >= 0) { /* bash compat: len < 0 is illegal */
|
if (len >= 0) {
|
||||||
if (beg < 0) {
|
if (beg < 0) {
|
||||||
/* negative beg counts from the end */
|
/* negative beg counts from the end */
|
||||||
beg = (arith_t)strlen(val) + beg;
|
beg = (arith_t)strlen(val) + beg;
|
||||||
@ -5723,6 +5743,7 @@ static NOINLINE const char *expand_one_var(char **to_be_freed_pp, char *arg, cha
|
|||||||
}
|
}
|
||||||
debug_printf_varexp("val:'%s'\n", val);
|
debug_printf_varexp("val:'%s'\n", val);
|
||||||
} else
|
} else
|
||||||
|
//TODO: in bash, len=-n means strlen()-n
|
||||||
#endif /* HUSH_SUBSTR_EXPANSION && FEATURE_SH_MATH */
|
#endif /* HUSH_SUBSTR_EXPANSION && FEATURE_SH_MATH */
|
||||||
{
|
{
|
||||||
die_if_script("malformed ${%s:...}", var);
|
die_if_script("malformed ${%s:...}", var);
|
||||||
|
Loading…
Reference in New Issue
Block a user