매개변수에 따옴표를 추가하는 유틸리티

매개변수에 따옴표를 추가하는 유틸리티

매개변수에 따옴표를 추가하고 표준 유틸리티에 출력을 추가하면 해결할 수 있는 문제가 있습니다. 웹에서 "매개변수에 따옴표를 추가하는 Linux 유틸리티"를 검색했지만 관련 항목을 찾지 못했습니다. 에이미 있나요? (xargs와 페어링해야 함)

PS 원본 문제(빠른 이해를 위해 기사 끝 부분 참조):
찾기에서 찾기 실행

답변1

이것이 다른 질문에 어떻게 도움이 될지는 모르겠지만 공백 문자로 구분된 인수를 인쇄하고 "줄 바꿈으로 묶고 끝나는 모든 것을 인쇄하는 명령이 정말로 필요한 경우 다음을 사용하여 수행할 수 있습니다 awk.

awk -- '
  BEGIN{
    printf "\""
    for (i = 1; i < ARGC; i++) printf "%s", (i == 1 ? "" : " ") ARGV[i]
    print "\""
  }' arg1 "arg 2" 'arg 3' 'arg "4"'

인쇄:

"arg1 arg 2 arg 3 arg "4""

답변2

C내 원래 질문은 @muru가 제안한 대로 올바른 해결책을 얻었지만 지금 작성한 것을 참조하기 위한 유틸리티가 있을 수 있습니다 (내 시스템에는 quote명령이 있지만 첫 번째 인수만 인용하고 나머지는 무시합니다). 일반적으로 gcc quoteit.c -o quoteit && chmod +x quoteit현재 폴더의 quoteit.c에 제공된 코드를 빌드합니다.

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(int argc, char *argv[])  
{ 
    if (argc ==2 && (!strcmp(argv[1],"-h") || !strcmp(argv[1],"--help")))
    {
        printf("The program surrounds set of arguments with double quotes\n");
        printf("Example: quoteit 12 23 outputs \"12 23\"\n");
        return 0;
    } 
    //printf("%d\n", argc); 

    printf("\""); 
    for (int i=1; i< argc; i++) 
    {
        printf("%s", argv[i]); 
        if (u<args-1) printf(" ");
    } 
    printf("\"");
    return 0; 
}

답변3

간단한 Bash 스크립트로 다음을 수행할 수 있습니다.

#!/bin/bash
echo "\"$*\""

$*전체 매개변수 목록이 생성 되었습니다 . echo이스케이프된 따옴표로 묶으세요.

myquote.sh hi, 'how do' you "do?"
"hi, how do you do?"

지금,관련된find절에서 얻은 파일 이름 주위에 따옴표를 붙이는 이 "quoter" 스크립트의 의도된 사용의 경우 exec, 이 예에서와 같이 중괄호 인수에 직접 따옴표를 추가할 수 있으므로 이는 필요하지 않습니다. grep명령과 동일:

find /etc -exec grep -Hi "{}" \;

또는 에 파이프하는 경우 이 절을 사용하여 xargs파이프라인에서 -print0다음 명령의 파일 이름을 NULL 구분 기호로 표시합니다 .xargs

관련 정보