パラメータに引用符を追加するユーティリティ

パラメータに引用符を追加するユーティリティ

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

関連情報