| 'use strict'; |
| |
| function escapeArgument(arg, quote) { |
| // Convert to string |
| arg = '' + arg; |
| |
| // If we are not going to quote the argument, |
| // escape shell metacharacters, including double and single quotes: |
| if (!quote) { |
| arg = arg.replace(/([()%!^<>&|;,"'\s])/g, '^$1'); |
| } else { |
| // Sequence of backslashes followed by a double quote: |
| // double up all the backslashes and escape the double quote |
| arg = arg.replace(/(\\*)"/g, '$1$1\\"'); |
| |
| // Sequence of backslashes followed by the end of the string |
| // (which will become a double quote later): |
| // double up all the backslashes |
| arg = arg.replace(/(\\*)$/, '$1$1'); |
| |
| // All other backslashes occur literally |
| |
| // Quote the whole thing: |
| arg = '"' + arg + '"'; |
| } |
| |
| return arg; |
| } |
| |
| module.exports = escapeArgument; |