fork(1) 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. ## builds $parmstring by concatenating key=value pairs
  16. catarr() {
  17. eval keys=(\"\${!$1[@]}\")
  18. for k in "${keys[@]}"
  19. do
  20. eval val=\${$1[$k]}
  21. parmstring+=", $k=$val"
  22. done
  23. }
  24. parmstring=""
  25. catarr parms
  26. catarr 'foo[@]}"); run_an_arbitrary_command; # '
  27.  
  28. echo ${parmstring[*]}
  29.  
Success #stdin #stdout #stderr 0s 4392KB
stdin
Standard input is empty
stdout
GOTCHA
, 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
+ eval 'keys=("${!parms[@]}")'
++ keys=("${!parms[@]}")
+ for k in "${keys[@]}"
+ eval 'val=${parms[engine]}'
++ val='"Sweave"'
+ parmstring+=', engine="Sweave"'
+ for k in "${keys[@]}"
+ eval 'val=${parms[verbose]}'
++ val=FALSE
+ parmstring+=', verbose=FALSE'
+ for k in "${keys[@]}"
+ eval 'val=${parms[tangle]}'
++ val=TRUE
+ parmstring+=', tangle=TRUE'
+ for k in "${keys[@]}"
+ eval 'val=${parms[complex' 'key]}'
++ val='two words'
+ parmstring+=', complex key=two words'
+ catarr 'foo[@]}"); run_an_arbitrary_command; # '
+ eval 'keys=("${!foo[@]}");' 'run_an_arbitrary_command;' '#' '[@]}")'
++ keys=("${!foo[@]}")
++ run_an_arbitrary_command
++ echo GOTCHA
+ echo , 'engine="Sweave",' verbose=FALSE, tangle=TRUE, complex key=two words