⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shquote.c

📁 UNIX下SH的实现源码
💻 C
字号:
/* Copyright (C) 1999 Free Software Foundation, Inc.   This file is part of GNU Bash, the Bourne Again SHell.   Bash is free software; you can redistribute it and/or modify it under   the terms of the GNU General Public License as published by the Free   Software Foundation; either version 2, or (at your option) any later   version.   Bash is distributed in the hope that it will be useful, but WITHOUT ANY   WARRANTY; without even the implied warranty of MERCHANTABILITY or   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   for more details.      You should have received a copy of the GNU General Public License along   with Bash; see the file COPYING.  If not, write to the Free Software   Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */#include <config.h>#if defined (HAVE_UNISTD_H)#  ifdef _MINIX#    include <sys/types.h>#  endif#  include <unistd.h>#endif#include <stdio.h>#if !defined(slashify_in_quotes)#  define slashify_in_quotes "\\`$\"\n"#endifextern char *xmalloc ();/* **************************************************************** *//*								    *//*	 Functions for quoting strings to be re-read as input	    *//*								    *//* **************************************************************** *//* Return a new string which is the single-quoted version of STRING.   Used by alias and trap, among others. */char *single_quote (string)     char *string;{  register int c;  char *result, *r, *s;  result = xmalloc (3 + (4 * strlen (string)));  r = result;  *r++ = '\'';  for (s = string; s && (c = *s); s++)    {      *r++ = c;      if (c == '\'')	{	  *r++ = '\\';	/* insert escaped single quote */	  *r++ = '\'';	  *r++ = '\'';	/* start new quoted string */	}    }  *r++ = '\'';  *r = '\0';  return (result);}/* Quote STRING using double quotes.  Return a new string. */char *double_quote (string)     char *string;{  register int c;  char *result, *r, *s;  result = xmalloc (3 + (2 * strlen (string)));  r = result;  *r++ = '"';  for (s = string; s && (c = *s); s++)    {      switch (c)        {	case '"':	case '$':	case '`':	case '\\':	case '\n':		/* XXX */	  *r++ = '\\';	default:	  *r++ = c;	  break;        }    }  *r++ = '"';  *r = '\0';  return (result);}/* Remove backslashes that are quoting characters that are special between   double quotes.  Return a new string. */char *un_double_quote (string)     char *string;{  register int c, pass_next;  char *result, *r, *s;  r = result = xmalloc (strlen (string) + 1);  for (pass_next = 0, s = string; s && (c = *s); s++)    {      if (pass_next)	{	  *r++ = c;	  pass_next = 0;	  continue;	}      if (c == '\\' && strchr (slashify_in_quotes, s[1]))	{	  pass_next = 1;	  continue;	}      *r++ = c;    }  *r = '\0';  return result;}/* Quote special characters in STRING using backslashes.  Return a new   string. */char *backslash_quote (string)     char *string;{  int c;  char *result, *r, *s;  result = xmalloc (2 * strlen (string) + 1);  for (r = result, s = string; s && (c = *s); s++)    {      switch (c)	{	case ' ': case '\t': case '\n':		/* IFS white space */	case '\'': case '"': case '\\':		/* quoting chars */	case '|': case '&': case ';':		/* shell metacharacters */	case '(': case ')': case '<': case '>':	case '!': case '{': case '}':		/* reserved words */	case '*': case '[': case '?': case ']':	/* globbing chars */	case '^':	case '$': case '`':			/* expansion chars */	  *r++ = '\\';	  *r++ = c;	  break;#if 0	case '~':				/* tilde expansion */	  if (s == string || s[-1] == '=' || s[-1] == ':')	    *r++ = '\\';	  *r++ = c;	  break;#endif	case '#':				/* comment char */	  if (s == string)	    *r++ = '\\';	  /* FALLTHROUGH */	default:	  *r++ = c;	  break;	}    }  *r = '\0';  return (result);}intcontains_shell_metas (string)     char *string;{  char *s;  for (s = string; s && *s; s++)    {      switch (*s)	{	case ' ': case '\t': case '\n':		/* IFS white space */	case '\'': case '"': case '\\':		/* quoting chars */	case '|': case '&': case ';':		/* shell metacharacters */	case '(': case ')': case '<': case '>':	case '!': case '{': case '}':		/* reserved words */	case '*': case '[': case '?': case ']':	/* globbing chars */	case '^':	case '$': case '`':			/* expansion chars */	  return (1);	case '~':				/* tilde expansion */	  if (s == string || s[-1] == '=' || s[-1] == ':')	    return (1);	case '#':	  if (s == string)			/* comment char */	    return (1);	  /* FALLTHROUGH */	default:	  break;	}    }  return (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -