我有一个问题可以通过向参数添加引号并将输出添加到标准的实用程序来解决。我在网络上搜索了“为参数添加引号的 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
我最初的问题得到了 @muru 建议的正确解决方案,但是也许有任何用于C
引用我现在编写的实用程序(我的系统有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