fork download
  1. #!/bin/bash
  2. #!/bin/bash
  3.  
  4. # pretend this is something evil -- deleting your home directory or opening a reverse SSH connection
  5. run_an_arbitrary_command() { echo "GOTCHA"; }
  6.  
  7. set -x
  8.  
  9. declare -A parms
  10. parms[engine]=\"Sweave\"
  11. parms[verbose]=FALSE
  12. parms[tangle]=TRUE
  13. parms["complex key"]="two words"
  14.  
  15. catarr() {
  16. local eval_str
  17.  
  18. printf -v eval_str '
  19. for k in "${!%q[@]}"; do
  20. parmstring+=", $k=${%q[$k]}"
  21. done
  22. ' "$1" "$1"
  23. eval "$eval_str"
  24. }
  25. parmstring=""
  26. catarr parms
  27. catarr 'foo[@]}"); run_an_arbitrary_command; # '
  28.  
  29. echo ${parmstring[*]}
  30.  
Success #stdin #stdout #stderr 0s 4276KB
stdin
Standard input is empty
stdout
, engine="Sweave", verbose=FALSE, tangle=TRUE, complex key=two words
stderr
+ declare -A parms
+ parms[engine]='"Sweave"'
+ parms[verbose]=FALSE
+ parms[tangle]=TRUE
+ parms["complex key"]='two words'
+ parmstring=
+ catarr parms
+ local eval_str
+ printf -v eval_str '
    for k in "${!%q[@]}"; do
      parmstring+=", $k=${%q[$k]}"
    done
  ' parms parms
+ eval '
    for k in "${!parms[@]}"; do
      parmstring+=", $k=${parms[$k]}"
    done
  '
++ for k in "${!parms[@]}"
++ parmstring+=', engine="Sweave"'
++ for k in "${!parms[@]}"
++ parmstring+=', verbose=FALSE'
++ for k in "${!parms[@]}"
++ parmstring+=', tangle=TRUE'
++ for k in "${!parms[@]}"
++ parmstring+=', complex key=two words'
+ catarr 'foo[@]}"); run_an_arbitrary_command; # '
+ local eval_str
+ printf -v eval_str '
    for k in "${!%q[@]}"; do
      parmstring+=", $k=${%q[$k]}"
    done
  ' 'foo[@]}"); run_an_arbitrary_command; # ' 'foo[@]}"); run_an_arbitrary_command; # '
+ eval '
    for k in "${!foo\[@\]\}\"\)\;\ run_an_arbitrary_command\;\ #\ [@]}"; do
      parmstring+=", $k=${foo\[@\]\}\"\)\;\ run_an_arbitrary_command\;\ #\ [$k]}"
    done
  '
./prog.sh: line 24: ${!foo\[@\]\}\"\)\;\ run_an_arbitrary_command\;\ #\ [@]}: bad substitution
+ echo , 'engine="Sweave",' verbose=FALSE, tangle=TRUE, complex key=two words