diff --git a/lib/escape.tcl b/lib/escape.tcl
new file mode 100755
index 0000000..493d943
--- /dev/null
+++ b/lib/escape.tcl
@@ -0,0 +1,127 @@
+#!/usr/bin/wish
+
+# This file provides many valuable quote and metachar escape processing
+# procedures.
+
+
+proc escape_bash_quotes { buffer } {
+
+  # Do a bash-style escape of all single quotes in the buffer and return the
+  # result.
+
+  # In bash, if you wish to have a single quote (i.e. apostrophe) inside
+  # single quotes, you must escape it.
+
+  # For example, the following bash command:
+  # echo 'Mike'\''s dog'
+  # Will produce the following output.
+  # Mike's dog
+
+  # So, if you pass the following string to this procedure:
+  # Mike's dog
+  # This procedure will return the following:
+  # Mike'\''s dog
+
+  # Description of argument(s):
+  # buffer                          The string whose single quotes are to be
+  #                                 escaped.
+
+  regsub -all {'} $buffer {'\''} new_buffer
+  return $new_buffer
+
+}
+
+
+proc quotes_to_curly_braces { buffer } {
+
+  # Convert a single-quoted string to a curly brace-quoted string and return
+  # the result.
+
+  # This procedure can help in converting bash expressions, which are quoted
+  # with single quotes, to equivalent TCL expressions which are quoted with
+  # curly braces.  This procedure will recognize and preserve a bash single
+  # quote escape sequence: '\''
+
+  # Description of argument(s):
+  # buffer                          The string whose quotes are to be
+  #                                 converted to curly braces.
+
+  # For example, the following code...
+
+  # set buffer {'Mike'\''s dog'}
+  # print_var buffer
+  # set buffer [quotes_to_curly_braces $buffer]
+  # print_var buffer
+
+  # Would produce the following result:
+  # buffer:     'Mike'\''s dog'
+  # buffer:     {Mike's dog}
+
+  set quote {'}
+
+  set return_buffer {}
+
+  set inside_quotes 0
+
+  # In a bash string "'\''" is an escaped quote which we wish to convert to a
+  # single quote.
+  set place_holder {supercaliforniaplace_holder}
+  regsub -all {'\\''} $buffer ${place_holder} buffer
+
+  # Walk the string one character at a time.
+  for {set ix 0} {$ix < [string length $buffer]} {incr ix} {
+    set char [string index $buffer $ix]
+    if { $char == $quote } {
+      # Processing a quote.  inside_quotes will tell us whether we've come
+      # across a left quote or a right quote.
+      if { $inside_quotes == 0 } {
+        # Processing closing quote.  Add a left curly brace to return_buffer
+        # and discard the quote char.
+        set return_buffer "${return_buffer}\{"
+        # Set inside_quotes to indicate we are now waiting for a closing quote.
+        set inside_quotes 1
+      } else {
+        # Processing opening quote.  Add a right curly brace to return_buffer
+        # and discard the quote char.
+        set return_buffer "${return_buffer}\}"
+        # Clear inside_quotes to indicate we have found our closing quote.
+        set inside_quotes 0
+      }
+    } else {
+      # For non-quote character, simply add it to the return buffer/
+      set return_buffer "${return_buffer}${char}"
+    }
+  }
+
+  regsub -all ${place_holder} $return_buffer {'} return_buffer
+
+  return $return_buffer
+
+}
+
+
+proc curly_braces_to_quotes { buffer } {
+
+  # Convert a curly brace-quoted string to a single-quoted string and return
+  # the result.
+
+  # This procedure can help in converting TCL expressions, which are quoted
+  # with curly braces, to equivalent bash expressions which are quoted with
+  # single quotes.  This procedure will first convert single quotes to the
+  # bash escaped single quote sequence: '\''
+
+  # Description of argument(s):
+  # buffer                          The string whose curly braces are to be
+  #                                 converted to single quotes.
+
+  # For example, the following buffer value:
+  # echo {Mike's dog}
+  # Will be changed to this:
+  # echo 'Mike'\''s dog'
+
+  regsub -all {[\{\}]} [escape_bash_quotes $buffer] {'} new_buffer
+  return $new_buffer
+
+}
+
+
