如果您需要简单(但正确)的解决方案,您可以使用:
function escapeShellArg (arg) {
    return `'${arg.replace(/'/g, `'\\''`)}'`;
}
所以你的字符串将像 Chris Johnsen 提到的那样简单地用单引号转义。
echo 'John'\''s phone';
它的工作原理bash是因为强烈的报价,感觉像它也适用于fish,但不会在工作zsh和sh。
如果您有bash您可以在运行脚本sh或zsh使用'bash -c \'' + escape('all-the-rest-escaped') + '\''。
但实际上...... node.js 将为您转义所有需要的字符:
var child = require('child_process')
  .spawn('echo', ['`echo 1`;"echo $SSH_TTY;\'\\0{0..5}']);
child.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});
child.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});
此代码块将执行:
echo '`echo 1`;"echo $SSH_TTY;'\''\\0{0..5}'
并将输出:
stdout: `echo 1`;"echo $SSH_TTY;\'\\0{0..5}
或一些错误。
看看http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options
顺便说一句,运行一堆命令的简单解决方案是:
require('child_process')
  .spawn('sh', ['-c', [
    'cd all/your/commands',
    'ls here',
    'echo "and even" > more'
  ].join('; ')]);
祝你今天过得愉快!