ktest.pl: Process variables within variables

Allow a variable to contain another variable. This will allow the
${shell <command>} to have its command include variables.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:
Steven Rostedt 2022-12-10 11:01:40 -05:00
parent 90d35da658
commit ca8edb78c1
1 changed files with 10 additions and 6 deletions

View File

@ -792,13 +792,13 @@ sub process_variables {
my $retval = "";
# We want to check for '\', and it is just easier
# to check the previous characet of '$' and not need
# to check the previous character of '$' and not need
# to worry if '$' is the first character. By adding
# a space to $value, we can just check [^\\]\$ and
# it will still work.
$value = " $value";
while ($value =~ /(.*?[^\\])\$\{(.*?)\}(.*)/) {
while ($value =~ /(.*?[^\\])\$\{([^\{]*?)\}(.*)/) {
my $begin = $1;
my $var = $2;
my $end = $3;
@ -818,16 +818,20 @@ sub process_variables {
# we simple convert to 0
$retval = "${retval}0";
} else {
# put back the origin piece.
$retval = "$retval\$\{$var\}";
# put back the origin piece, but with $#### to not reprocess it
$retval = "$retval\$####\{$var\}";
# This could be an option that is used later, save
# it so we don't warn if this option is not one of
# ktests options.
$used_options{$var} = 1;
}
$value = $end;
$value = "$retval$end";
$retval = "";
}
$retval = "$retval$value";
$retval = $value;
# Convert the saved variables with $####{var} back to ${var}
$retval =~ s/\$####/\$/g;
# remove the space added in the beginning
$retval =~ s/ //;