매개변수에 따옴표를 추가하고 표준 유틸리티에 출력을 추가하면 해결할 수 있는 문제가 있습니다. 웹에서 "매개변수에 따옴표를 추가하는 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