bash의 문자열을 이스케이프하는 명령
문자열을 이스케이프된 것으로 변환하는 bash 명령이 필요합니다.다음은 예입니다.
echo "hello\world" | escape | someprog
이스케이프 명령이 실행되는 위치"hello\world"
안으로"hello\\\world"
그러면, 어떤 프로그램은"hello\\world"
예상대로물론, 이것은 제가 실제로 무엇을 할 것인지에 대한 단순화된 예입니다.
배시에서:
printf "%q" "hello\world" | someprog
예:
printf "%q" "hello\world"
hello\\world
이는 변수를 통해서도 사용할 수 있습니다.
printf -v var "%q\n" "hello\world"
echo "$var"
hello\\world
순수 Bash, 매개 변수 대체 사용:
string="Hello\ world"
echo ${string//\\/\\\\} | someprog
내장된 배시${…@Q}
확장이 얼마 전에 추가되었습니다.
echo "hello\\world" | ( read -rsd '' x; echo ${x@Q} )
'hello\world'
이스케이프된 출력은 bash 형식이므로 필요한 출력이 아닐 수 있습니다.
참고 항목: https://stackoverflow.com/a/27817504/401059
그것은 당신이 원하는 것이 아닐 수도 있습니다. 왜냐하면 그것은 누구의 시스템에서도 표준 명령이 아니기 때문입니다. 하지만 제 프로그램은 POSIX 시스템에서 잘 작동할 것이기 때문입니다(컴파일된 경우).문제의 컴퓨터에서 프로그램을 컴파일하거나 추가할 수 있는 기능이 있으면 작동해야 합니다.
지금까지 1년 정도 문제없이 사용했는데, 엣지 케이스가 일부 처리가 안 될 수도 있습니다.가장 구체적으로, 나는 그것이 문자열의 새로운 줄에 어떤 영향을 미칠지 모릅니다; 사례.\\n
추가해야 할 수 있습니다.이 등장인물 목록은 권위적이지는 않지만, 다른 모든 것을 포함한다고 생각합니다.
나는 특별히 이것을 '도우미' 프로그램으로 써서 다음과 같은 것들을 위한 포장지를 만들 수 있었습니다.scp
명령을 실행합니다.
셸 기능으로도 구현될 수 있습니다.
그러므로 나는 발표합니다.escapify.c
이렇게 사용합니다.
scp user@host:"$(escapify "/this/path/needs to be escaped/file.c")" destination_file.c
참고:저는 이 프로그램을 개인적인 용도로 만들었습니다.또한 둘 이상의 인수가 주어지면 탈출하지 않은 공간을 인쇄하고 계속 진행해야 한다고 가정합니다.즉, 여러 이스케이프된 인수를 올바르게 전달하는 데 사용할 수 있지만 일부에서는 원하지 않는 동작으로 보일 수 있습니다.
#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;
}
perl을 사용하여 다음과 같은 다양한 문자를 바꿀 수 있습니다.
$ echo "Hello\ world" | perl -pe 's/\\/\\\\/g'
Hello\\ world
이스케이프의 특성에 따라 여러 통화를 체인으로 연결하여 올바른 문자를 이스케이프할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2854655/command-to-escape-a-string-in-bash
'programing' 카테고리의 다른 글
닫기 명령을 단추에 바인딩하는 방법 (0) | 2023.05.28 |
---|---|
목표-C와 C++는 어떻게 다릅니까? (0) | 2023.05.23 |
npm 모듈의 모든 버전을 나열하는 방법은 무엇입니까? (0) | 2023.05.23 |
C#에서 예외를 다시 적용하는 올바른 방법은 무엇입니까? (0) | 2023.05.23 |
동일한 기본 키를 참조하는 두 개의 외부 키 (0) | 2023.05.23 |