首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >命令对bash中的字符串进行转义

命令对bash中的字符串进行转义
EN

Stack Overflow用户
提问于 2010-05-18 12:58:01
回答 5查看 143.3K关注 0票数 112

我需要一个bash命令,它可以将字符串转换为转义的内容。下面是一个例子:

代码语言:javascript
复制
echo "hello\world" | escape | someprog

其中,escape命令使"hello\world"进入"hello\\\world"。然后,某个程序就可以像它期望的那样使用"hello\\world"。当然,这是我真正要做的一个简化的例子。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-05-18 17:35:46

在Bash中:

代码语言:javascript
复制
printf "%q" "hello\world" | someprog

例如:

代码语言:javascript
复制
printf "%q" "hello\world"
hello\\world

这也可以通过变量使用:

代码语言:javascript
复制
printf -v var "%q\n" "hello\world"
echo "$var"
hello\\world
票数 177
EN

Stack Overflow用户

发布于 2010-05-18 14:40:40

纯Bash,使用参数替换:

代码语言:javascript
复制
string="Hello\ world"
echo ${string//\\/\\\\} | someprog
票数 9
EN

Stack Overflow用户

发布于 2020-12-17 14:54:24

它可能不是您想要的,因为它不是任何人的系统上的标准命令,但是由于我的程序在POSIX系统(如果编译)上应该可以很好地工作,所以我无论如何都要提到它。如果你有能力在有问题的机器上编译或添加程序,它应该可以工作。

我已经使用它大约一年了,没有问题,但它可能不能处理一些边缘情况。更具体地说,我不知道它将如何处理字符串中的换行符;可能需要添加\\n的大小写。这份字符列表没有权威性,但我相信它涵盖了其他所有内容。

我专门把它写成一个“助手”程序,这样我就可以为像scp命令这样的东西做一个包装器。

它也可以作为shell函数实现。

因此,我将介绍escapify.c。我这样使用它:

代码语言:javascript
复制
scp user@host:"$(escapify "/this/path/needs to be escaped/file.c")" destination_file.c

请注意:此程序是我个人使用的。它还将(可能是错误的)假设,如果给出多个参数,它应该只打印一个未转义的空格并继续。这意味着它可以用来正确地传递多个转义参数,但可能被某些人视为不想要的行为。

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
  char c='\0';
  int i=0;
  int j=1;
  /* do not care if no args passed; escaped nothing is still nothing. */
  if(argc < 2)
  {
    return 0;
  }
  while(j<argc)
  {
    while(i<strlen(argv[j]))
    {
      c=argv[j][i];
      /* this switch has no breaks on purpose. */
      switch(c)
      {
      case ';':
      case '\'':
      case ' ':
      case '!':
      case '"':
      case '#':
      case '$':
      case '&':
      case '(':
      case ')':
      case '|':
      case '*':
      case ',':
      case '<':
      case '>':
      case '[':
      case ']':
      case '\\':
      case '^':
      case '`':
      case '{':
      case '}':
        putchar('\\');
      default:
        putchar(c);
      }
      i++;
    }
    j++;
    if(j<argc) {
      putchar(' ');
    }
    i=0;
  }
  /* newline at end */
  putchar ('\n');
  return 0;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2854655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档