ktest.pl: Process variables within variables
authorSteven Rostedt <rostedt@goodmis.org>
Sat, 10 Dec 2022 16:01:40 +0000 (11:01 -0500)
committerSteven Rostedt <rostedt@goodmis.org>
Fri, 15 Mar 2024 14:50:51 +0000 (10:50 -0400)
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>
tools/testing/ktest/ktest.pl

index 829f5bdfd2e439346860b076de38d0a36271efa0..4383729e0fc271f2ae7707f5fc5c05f4aa62b90b 100755 (executable)
@@ -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/ //;