31 lines
		
	
	
		
			875 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			31 lines
		
	
	
		
			875 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 |