パラメータに引用符を追加して標準ユーティリティに出力を追加すると、解決できる問題があります。 Webで「パラメータに引用符を追加する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